SailsJS – Nodejs的https请求。 发送后无法设置标题

我是Sails.js的新手,我试图做一个filter来授权使用从更高的服务器,一个守门员,从GitHub API进行OAuth2身份validation负责的持证人令牌。 服务stream运作良好。 我已经知道了Passport.js,但是我正试图自己实现这个。 我带来了一个如下的policy

 module.exports = function (req, res, next) { var httpsExec = require('https'); if (req.headers.authorization) { var parts = req.headers.authorization.split(' '); if (parts.length == 2) { var tokenType = parts[0] , credentials = parts[1]; if (/^Bearer$/i.test(tokenType) || /^bearer$/i.test(tokenType)) { httpsExec.request({ host: 'api.github.com', post: 443, path: '/user', method: 'GET', headers: {'Authorization': 'token ' + credentials, 'User-Agent': 'curly'} }, function (response) { var responseData = ''; response.setEncoding('utf8'); response.on('data', function (chunk) { responseData += chunk; }); response.once('error', function (err) { next(err); }); response.on('end', function () { try { req.options.user = JSON.parse(responseData); next(); } catch (e) { res.send(401, {error: e}); } }); }).end(); } else { console.err("The token is not a Bearer"); res.send(401) } } } else { res.send(401, {error: "Full authentication is necessary to access this resource"}) } }; 

一旦我点击了控制器路由,就会调用该策略,但是会抛出一个_http_outgoing.js:335 throw new Error('Can\'t set headers after they are sent.'); ^ Error: Can't set headers after they are sent. _http_outgoing.js:335 throw new Error('Can\'t set headers after they are sent.'); ^ Error: Can't set headers after they are sent.

这个过程终止。

我想这个问题是next()和我试过的地方的returns ,为了放下next()调用,但是仍然给我这个错误,如果我删除,那么我locking策略上的请求。

编辑

我做了一个简单的政策示例,我只是在req.options.values上设置了一些属性,发生了同样的问题,所以也许可能是req.options.requestData = JSON.parse(responseData); ? 我还可以设置一个属性发送给控制器?

  response.once('error', function (err) { next(err); }); response.on('end', function () { try { req.options.user = JSON.parse(responseData); next(); } catch (e) { res.send(401, {error: e}); } }); 

两者都得到执行。检查console.log(“东西”)的错误,看看是否有错误。

当您试图一起修改请求和响应,或者修改其中一个两次时,会发生这种情况。

在你的代码中,我认为callback被调用了两次,同时你也在修改响应。 检查你正在调用callback“next()”的行。 你会发现你的问题。