当contentType =“application / json”时,Azure + Nodejs 400 Bad Request

时间:2013-03-21 14:55:58

标签: node.js jquery azure express ember-data

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

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

  • 在网络浏览器中访问“(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解决方案以允许内容类型为http:“application / json; charset = UTF-8”?

更新

评论后,这是服务器端代码

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'));
});

1 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但我想我可能也遇到了这个并找到了解决方案。对我而言,问题是express treats the empty body as invalid JSONContentType: application/json请求上设置GET标头的方式。

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