記事IDの代わりにURLでスラッグを使用する必要があったため、meanjsが提供する記事の例でいくつか変更しましたが、問題があり、リスト、表示、編集はできますが、新しいものを作成できません. 私は MEAN スタックに精通していないので、変更に非常に問題がある可能性が非常に高いですが、それを機能させる方法を考えることができます。
スラッグは記事作成時にタイトルから生成されます。私も編集したかったのですが、slugフィールドも編集対象にすると、編集機能も機能しなくなります...
コードは、垂直モジュールを使用する meanjs の 0.4 ブランチからのものです。
私が変更した場合の article.client.service.js で:
angular.module('articles').factory('Articles', ['$resource',
function($resource) {
return $resource('api/articles/:articleSlug', {
articleSlug: '@slug'
}, {
update: {
method: 'PUT'
}
});
}
]);
為に:
angular.module('articles').factory('Articles', ['$resource',
function($resource) {
return $resource('api/articles/:articleSlug', {
articleSlug: '@_id'
}, {
update: {
method: 'PUT'
}
});
}
]);
作成機能は動き始めますが、編集機能が停止します... -.-
どんな助けでも感謝します。ありがとう
これは私のarticle.server.routes.jsです
'use strict';
/**
* Module dependencies.
*/
var articlesPolicy = require('../policies/articles.server.policy'),
articles = require('../controllers/articles.server.controller');
module.exports = function(app) {
// Articles collection routes
app.route('/api/articles').all(articlesPolicy.isAllowed)
.get(articles.list)
.post(articles.create);
// Single article routes
app.route('/api/articles/:articleSlug').all(articlesPolicy.isAllowed)
.get(articles.read)
.put(articles.update)
.delete(articles.delete);
// Finish by binding the article middleware
app.param('articleSlug', articles.articleBySlug);
};
これは私のarticle.client.service.jsです
'use strict';
//Articles service used for communicating with the articles REST endpoints
angular.module('articles').factory('Articles', ['$resource',
function($resource) {
return $resource('api/articles/:articleSlug', {
articleSlug: '@slug'
}, {
update: {
method: 'PUT'
}
});
}
]);
これは私のarticle.client.controller.jsです
'use strict';
angular.module('articles').controller('ArticlesController', ['$scope', '$stateParams', '$location', 'Authentication', 'Articles',
function($scope, $stateParams, $location, Authentication, Articles) {
$scope.authentication = Authentication;
$scope.create = function() {
var article = new Articles({
slug: this.title.toLowerCase().replace(/ /g, '-'),
title: this.title,
content: this.content
});
article.$save(function(response) {
$location.path('articles/' + response.slug);
$scope.slug = '';
$scope.title = '';
$scope.content = '';
}, function(errorResponse) {
$scope.error = errorResponse.data.message;
});
};
$scope.remove = function(article) {
if (article) {
article.$remove();
for (var i in $scope.articles) {
if ($scope.articles[i] === article) {
$scope.articles.splice(i, 1);
}
}
} else {
$scope.article.$remove(function() {
$location.path('articles');
});
}
};
$scope.update = function() {
var article = $scope.article;
article.$update(function() {
$location.path('articles/' + article.slug);
}, function(errorResponse) {
$scope.error = errorResponse.data.message;
});
};
$scope.find = function() {
$scope.articles = Articles.query();
};
$scope.findOne = function() {
$scope.article = Articles.get({
articleSlug: $stateParams.articleSlug
});
};
}
]);
これは私のarticle.server.controller.jsです
'use strict';
/**
* Module dependencies.
*/
var _ = require('lodash'),
path = require('path'),
mongoose = require('mongoose'),
Article = mongoose.model('Article'),
errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller'));
/**
* Create a article
*/
exports.create = function(req, res) {
var article = new Article(req.body);
article.user = req.user;
article.save(function(err) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(article);
}
});
};
/**
* Show the current article
*/
exports.read = function(req, res) {
res.json(req.article);
};
/**
* Update a article
*/
exports.update = function(req, res) {
var article = req.article;
article.title = req.body.title;
article.content = req.body.content;
article.save(function(err) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(article);
}
});
};
/**
* Delete an article
*/
exports.delete = function(req, res) {
var article = req.article;
article.remove(function(err) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(article);
}
});
};
/**
* List of Articles
*/
exports.list = function(req, res) {
Article.find().sort('-created').populate('user', 'displayName').exec(function(err, articles) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(articles);
}
});
};
/**
* Article middleware
*/
exports.articleBySlug = function(req, res, next, slug) {
Article.findOne({'slug': slug}).populate('user', 'displayName').exec(function(err, article) {
if (err) return next(err);
if (!article) return next(new Error('Failed to load article ' + slug));
req.article = article;
next();
});
};