3

我有一个 Node.js,Express 应用程序,用作 Emberjs RESTAdapter 的 REST api。我试图让它在 Windows Azure 上运行。当 Ember 在“/examples/1”上发出 HTTP 请求时,如下所示给我一个 400,错误请求。

故障排除后,错误似乎取决于请求标头内容类型。

  • 在网络浏览器中访问“(domain)/users/1”会在浏览器窗口中打印出正确的 json。
  • 运行 Jquery ajax 调用给我以下结果:

    这不起作用:

    $.ajax({
      url: "/users/1",
      contentType: "application/json; charset=UTF-8"
    }).done(function(data) {
      console.log(data);
    });
    

    但是,当切换到这个时,它可以工作。

    $.ajax({
       url: "/users/1",
       contentType: "application/x-www-form-urlencoded; charset=UTF-8"
    }).done(function(data) {
       console.log(data);
    });
    

现在,如何设置我的 nodejs/azure 解决方案以允许内容类型为“application/json; charset=UTF-8”的 http 请求?

更新

注释后,这是服务器端代码

var express = require('express');
var app = express();

app.configure(function(){

   app.set('port', process.env.PORT || 3000);
   app.use(express.bodyParser());
   app.use('/', express.static(__dirname + '/WebContent'));
   app.use(express.cookieParser());

});

app.get('/:param/:id', function(req, res) {
   res.json(200, {user: {id:1, name: 'tester'}} )
});

app.get('/:param', function(req, res) {
   res.json(200, {users: [{id:1, name: 'tester'}]})
});

app.listen(app.get('port'), function(){
    console.log("Express server listening on port " + app.get('port'));
});
4

1 回答 1

1

我知道这是一个老问题,但我想我可能也遇到过这个问题并找到了解决方案。对我来说,问题是当您在请求上设置标头时,express 将空正文视为无效 JSON的方式。ContentType: application/jsonGET

text/plain如果您不发送数据,建议的解决方法是将 contentType 设置为。

于 2013-05-23T19:47:43.907 回答