在Express JS for Ajax中设置REST路由,仅用于Backbone

mvb*_*fst 7 routes node.js express backbone.js

我正在使用Node重新编写使用Node.js的现有网站.

该站点的前端将使用Backbone JS,因此我需要拥有符合本机Backbone同步的所有必要路由.现在,大多数URL的客户端和Backbone同步都是一样的.但它们不适用于常规GET,因为它们需要返回JSON.

所以我在想,在Backbone中为模型/集合URL添加扩展名是否是个好主意,例如.json,在Express中为每条路径添加这个:

app.get('/p/:topCategory/:category/:product.:format', function(req, res) { ... });
Run Code Online (Sandbox Code Playgroud)

if (req.params.id == 'json')比我们发送JSON,否则我们渲染HTML?

还是有更好的方法?请帮忙.

ale*_*lex 12

更好的方法是使用Express 3.x中的内容协商功能,即res.format:

https://github.com/visionmedia/express/blob/master/lib/response.js#L299-378

res.format({
  text: function(){
    res.send('hey');
  },

  html: function(){
    res.send('<p>hey</p>');
  },

  json: function(){
    res.send({ message: 'hey' });
  }
});
Run Code Online (Sandbox Code Playgroud)

你接近也没关系,Yammer为前.使用相同的方法:http://developer.yammer.com/api/#message-viewing


ebo*_*man 6

Accept在请求中使用标头:Accept: application/json如果您想要接收JSON,Accept: text/HTML如果您想要HTML.