在编写API时,我遇到了一个非常棘手的错误:当我尝试使用Content-Type标头res.send(INSERT JSON)
(大多数AJAX的默认设置)执行application/json
时,我得到了一个invalid json
错误。当我将内容类型设置为其他任何内容时(例如text/plain
),我得到了正确的响应,但为了使用一些前端框架,我需要支持application/json
。这是实际的错误消息:
Error: invalid json
at Object.exports.error (/Users/Brad/node_modules/express/node_modules/connect/lib/utils.js:44:13)
at IncomingMessage.module.exports (/Users/Brad/node_modules/express/node_modules/connect/lib/middleware/json.js:68:73)
at IncomingMessage.EventEmitter.emit (events.js:85:17)
at IncomingMessage._emitEnd (http.js:366:10)
at HTTPParser.parserOnMessageComplete [as onMessageComplete] (http.js:149:23)
at Socket.socket.ondata (http.js:1680:22)
at TCP.onread (net.js:410:27)
我的服务器代码如下:
app.configure(function () {
app.use(express.bodyParser());
app.use(express.cookieParser('SALT'));
app.use(express.static(__dirname + '/static/'));
app.use(express.session());
});
app.get('/users', function(req, res) {
res.send({'test': 'test'});
});
以下是我邮差设置的图片 - 我使用Postman Chrome扩展程序来测试我的API:
答案 0 :(得分:4)
我认为问题在于您希望在服务器响应中使用Content-Type标头;不在你的请求内容类型标题。
当您在请求中使用Content-Type标头时,Express将读取Content-Type并尝试将提供的信息解释为Content-Type,在本例中为JSON。因为这是一个GET请求,因此没有正文,所以Express试图将空字符串解释为JSON,这会给你错误。