4

在编写 API 时,我遇到了一个非常棘手的错误:当我尝试res.send(INSERT JSON)使用 Content-Type 标头application/json(大多数 AJAX 的默认设置)时,我得到一个invalid json错误。当我将 content-type 设置为其他任何内容(例如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 设置的图片——我正在使用 Postman Chrome 扩展来测试我的 API: 在此处输入图像描述

4

1 回答 1

4

我认为问题在于您想在服务器响应中使用 Content-Type 标头;不在您的请求 Content-Type 标头中。

当您在请求中使用 Content-Type 标头时,Express 将读取 Content-Type 并尝试将提供的信息解释为该 Content-Type,在本例中为 JSON。因为这是一个 GET 请求,因此没有正文,Express 试图将一个空字符串解释为 JSON,这会给您带来错误。

于 2013-06-02T19:54:39.323 回答