我很难将我们的移动应用程序和web界面的api调用分离开来,基本上代码是相同的,但是响应应该是不同的(html对于web,json对于api调用和app)。
所以现在我有这样的路线:
app.post('/post', auth.needed, posts.create)
app.post('/addPost', posts.createJson)第一个用于web应用程序,第二个用于
但是"posts.create“里面的逻辑是一样的,它基本上上传图像并将帖子保存到db,现在我已经复制了代码,并正在寻求构造建议,如何正确地做到这一点,以及类似情况下的最佳实践是什么--谢谢!
exports.create = function (req, res) {
var post= new Post(req.body)
post.user = req.user
//custom logic
post.uplSave(req.files.image, function (err) {
if (!err) {
return res.redirect('/posts/'+post._id)
}
}
}
exports.createJson = function (req, res) {
var post = new Post(req.body)
post.user = req.user
//custom logic
post.uplSave(req.files.image, function (err) {
if (!err) {
res.json({
data: post,
})
}
}
}发布于 2013-11-03 15:29:58
听起来您可以从使用res.format中获益,所以您可以重用您的处理程序:
exports.create = function (req, res) {
var post = new Post(req.body);
post.user = req.user;
post.uplSave(req.files.image, function (err) {
if (err)
return res.send(500);
res.format({
default : function() {
res.redirect('/posts/' + post._id);
},
json : function() {
res.json({ data : post });
}
});
});
}如果客户机显式地告诉服务器它需要一个JSON响应(使用Accept: application/json头),服务器将返回JSON。否则(在default情况下)它将产生重定向。
由于这取决于客户端执行正确的操作(在您的情况下可能不是这样),另一个解决方案是为您的处理程序创建一个部分函数,将返回类型作为固定参数传递:
app.post('/post', auth.needed, posts.create.bind(posts, 'default'));
app.post('/addPost', posts.create.bind(posts, 'json'));
// your handler would look like this:
exports.create = function(type, req, res) {
...
if (type === 'json')
return res.json(...);
return res.redirect(...);
};https://stackoverflow.com/questions/19754261
复制相似问题