Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何支持node.js的api和web界面数据交互?_Javascript_Node.js_Mongoose - Fatal编程技术网

Javascript 如何支持node.js的api和web界面数据交互?

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中,现在

我在区分我们的移动应用程序和web界面的api调用时遇到了很大的困难,基本上代码是相同的,但响应应该不同(web的html和应用程序的api调用的json)

所以现在我有这样的路由:

  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(...);
};