【发布时间】:2014-01-28 23:02:26
【问题描述】:
我有这个 rest api:
'use strict';
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
Post = mongoose.model('Post'),
_ = require('lodash');
/**
* Find post by id
*/
exports.post = function(req, res, next, id) {
Post.findOne({ '_id': id }, function (err, post) {
if (err) {
return next(err);
}
if (!post) {
return next(new Error('Failed to load post ' + id));
}
req.post = post;
next();
});
};
/**
* Create a post
*/
exports.create = function(req, res) {
var post = new Post(req.body);
post.save(function(err) {
if (err) {
res.jsonp(500,{ error: err.message });
} else {
res.jsonp(post);
}
});
};
/**
* Update a post
*/
exports.update = function(req, res) {
var post = req.post;
post = _.extend(post, req.body);
post.save(function(err) {
if (err) {
res.jsonp(500,{ error: err.message });
} else {
res.jsonp(post);
}
});
};
/**
* Delete a post
*/
exports.destroy = function(req, res) {
var post = req.post;
post.remove(function(err) {
if (err) {
res.jsonp(500,{ error: err.message });
} else {
res.jsonp(post);
}
});
};
/**
* Show a post by id
*/
exports.show = function(req, res) {
res.jsonp(req.post);
};
/**
* List of public posts
*/
exports.all = function(req, res) {
Post.find().sort('-created').exec(function(err, posts) {
if (err) {
res.jsonp(500,{ error: err.message });
} else {
res.jsonp(200,posts);
}
});
};
与
/* Post */
var postController = require('../app/controllers/api/post');
app.post('/api/post', postController.create);
app.get('/api/post', postController.all);
app.put('/api/post/:postId', postController.update);
app.del('/api/post/:postId', postController.destroy);
app.get('/api/post/:postId', postController.show);
/* Post Param */
app.param('postId', postController.post);
现在我需要另一条路线,例如 api/post/:slug
但我不知道该转向哪个方向,请给我一个提示,好吗? 使用 slug 而不是 id 管理可能是一种好方法吗?
喜欢
exports.post = function(req, res, next, slug) {
Post.findOne({'slug': slug}, function (err, post) {
if (err) {
return next(err);
}
if (!post) {
return next(new Error('Failed to load post ' + slug));
}
req.post = post;
next();
});
};
【问题讨论】:
-
那行不通。
:postId和:slug只是变量名。路线保持不变。 -
我的意思是使用 slug 而不是 id 总而言之我得到了 slug 的唯一性和索引
-
如果
:postId和:slug不需要不同的路由,不知道你的问题是什么?只需对:slug使用给定的路由即可。