【发布时间】:2018-05-10 22:19:05
【问题描述】:
我需要在向 API 发出请求后发送响应,但这不起作用:
app.post('/auth/login', (req, res, next) => {
if (req.body.login && req.body.password) {
var options = { method: 'POST',
url: 'https://auth.etna-alternance.net/login',
resolveWithFullResponse: true,
headers:
{'cache-control': 'no-cache',
'content-type': 'multipart/form-data;' },
formData: { login: req.body.login, password: req.body.password } };
request(options)
.then(function (response) {
console.log(response.body);
var rawcookies = response.headers['set-cookie'];
console.log(rawcookies);
res.sendStatus(200);
})
.catch(function (err) {
res.sendStatus(300);
});
} else {
// res.sendStatus(400);
}
return next();
});
我的错误:
Unhandled rejection Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:494:11)
at ServerResponse.setHeader (_http_outgoing.js:501:3)
at ServerResponse.header (/Users/nathan/API-Poulette/node_modules/express/lib/response.js:767:10)
at ServerResponse.contentType (/Users/nathan/API-Poulette/node_modules/express/lib/response.js:595:15)
at ServerResponse.sendStatus (/Users/nathan/API-Poulette/node_modules/express/lib/response.js:357:8)
at /Users/nathan/API-Poulette/src/auth.js:41:16
at tryCatcher (/Users/nathan/API-Poulette/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/Users/nathan/API-Poulette/node_modules/bluebird/js/release/promise.js:512:31)
at Promise._settlePromise (/Users/nathan/API-Poulette/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/Users/nathan/API-Poulette/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/Users/nathan/API-Poulette/node_modules/bluebird/js/release/promise.js:689:18)
at Async._drainQueue (/Users/nathan/API-Poulette/node_modules/bluebird/js/release/async.js:133:16)
at Async._drainQueues (/Users/nathan/API-Poulette/node_modules/bluebird/js/release/async.js:143:10)
at Immediate.Async.drainQueues (/Users/nathan/API-Poulette/node_modules/bluebird/js/release/async.js:17:14)
at runCallback (timers.js:789:20)
at tryOnImmediate (timers.js:751:5)
at processImmediate [as _immediateCallback] (timers.js:722:5)
我使用request-promise,我真的需要等待并在我自己的 API 上发送 API 响应
谢谢你的帮助
【问题讨论】:
-
基本上意味着你已经处于Body或者Finished状态,但是一些函数试图设置一个header或者statusCode。因为您已经在代码的其他地方这样做了
-
是的,但我之前不打电话给 res
-
已经读过,但我不使用 res.send 或第一个之前的任何东西
-
简单地说-是的。
res.sendStatus多次出现在您的代码中!!你都尝试了些什么?尝试调试,然后可能会发布更多代码。因为没有更多细节,所以有几个类似的问题,所以看看他们