Javascript 如何支持node.js的api和web界面数据交互?
我在区分我们的移动应用程序和web界面的api调用时遇到了很大的困难,基本上代码是相同的,但响应应该不同(web的html和应用程序的api调用的json) 所以现在我有这样的路由:Javascript 如何支持node.js的api和web界面数据交互?,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我在区分我们的移动应用程序和web界面的api调用时遇到了很大的困难,基本上代码是相同的,但响应应该不同(web的html和应用程序的api调用的json) 所以现在我有这样的路由: app.post('/post', auth.needed, posts.create) app.post('/addPost', posts.createJson) 第一个用于web应用程序,第二个用于 但是“posts.create”里面的逻辑是一样的,它基本上是上传图像并将post保存到db中,现在
app.post('/post', auth.needed, posts.create)
app.post('/addPost', posts.createJson)
第一个用于web应用程序,第二个用于
但是“posts.create”里面的逻辑是一样的,它基本上是上传图像并将post保存到db中,现在我有重复的代码,并寻求结构化建议如何正确地做到这一点,以及类似情况下的最佳实践是什么
谢谢
听起来您可以从使用中受益,因此您可以重新使用处理程序:
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。否则(默认情况下)它将生成重定向
因为这取决于客户做正确的事情™, 在您的情况下可能不是这样,另一种解决方案是为处理程序创建一个,将返回类型作为固定参数传递:
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(...);
};
接受:application/json,但如果application提交的不仅仅是json数据,还购买图像/文件等呢?部分解决方案看起来不错!thanks@Leg0
Accept
表示“我愿意接收JSON作为响应”。提交数据是另外一回事,由请求中的内容类型头控制。哦,我的糟糕;)谢谢你的回复
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(...);
};