我有一个Node.js,Express应用程序,用作Emberjs RESTAdapter的REST API。我试图让这个在Windows Azure上运行。当Ember在“/ examples / 1”上发出HTTP请求时,如下所示给我一个400,Bad Request。
排除故障后,似乎错误取决于请求标头内容类型。
运行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'));
});
答案 0 :(得分:1)
我知道这是一个老问题,但我想我可能也遇到了这个并找到了解决方案。对我而言,问题是express treats the empty body as invalid JSON在ContentType: application/json
请求上设置GET
标头的方式。
如果您不发送数据,建议的解决方法是将contentType设置为text/plain
。