node.js 0.12和grunt-contrib-connect - 调用setHeader()时出错

时间:2015-03-19 18:37:20

标签: node.js grunt-contrib-connect

我正在使用grunt-contrib-connect在开发中提供我的应用程序,在升级到node.js 0.12后,我在尝试浏览我的应用时遇到了错误:

Error: "name" and "value" are required for setHeader().
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:333:11)
at ServerResponse.res.setHeader (/Users/abc/app/node_modules/grunt-contrib-connect/node_modules/connect/lib/patch.js:59:22)
at Object.module.exports.grunt.config.options.middleware.allowCors [as handle] (/Users/abc/app/grunt_tasks/connect.js:24:29)
at next (/Users/abc/app/node_modules/grunt-contrib-connect/node_modules/connect/lib/proto.js:190:15)
at Object.module.exports [as handle] (/Users/abc/app/node_modules/grunt-contrib-connect/node_modules/connect-livereload/index.js:84:5)
at next (/Users/abc/app/node_modules/grunt-contrib-connect/node_modules/connect/lib/proto.js:190:15)
at Function.app.handle (/Users/abc/app/node_modules/grunt-contrib-connect/node_modules/connect/lib/proto.js:198:3)
at Server.app (/Users/abc/app/node_modules/grunt-contrib-connect/node_modules/connect/lib/connect.js:65:37)
at Server.emit (events.js:110:17)
at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:491:12)

除升级节点外没有其他任何更改。我尝试更新到最新版本的grunt-contrib-connect,但我仍然收到错误。

1 个答案:

答案 0 :(得分:1)

通过查看跟踪,似乎在函数allowCors中指定要连接的中间件中发生错误。通常指定一个中间件函数来在响应上设置CORS访问头。作为此功能的一部分,通常有以下行:

res.setHeader('Access-Control-Allow-Origin', req.headers.origin);

其中,从节点0.12开始,将在未定义req.headers.origin的请求中抛出此错误。

似乎在0.12中,进行了一项需要值存在的更改,以前可能未定义。请参阅更改:https://github.com/joyent/node/commit/979d0ca874df0383311ca06f154f6965074196ee

当使用0.12时,在指定此中间件功能时,一个选项只是添加一个检查,以确定在尝试在响应上设置访问头之前是否定义了req.headers.origin

if (req.headers.origin) {
    res.setHeader('Access-Control-Allow-Credentials', true);
    res.setHeader('Access-Control-Allow-Origin', req.headers.origin);
    res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.setHeader('Access-Control-Allow-Headers', 'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version');
}