1

波纹管代码运行良好,但是当授权标头带有来自 php 代码的空令牌(例如-'Authorization: Bearer')时,node.js 应用程序崩溃。我正在使用“passport-azure-ad”节点模块。我检查了 Post man,它验证了令牌,但是当请求来自 php curl 请求时,应用程序崩溃了。原因是,http 标头在“passport-azure-ad”节点模块中设置了两次。我无法捕捉到这个错误。

router.get('/getUser', passport.authenticate('oauth-bearer', {
    session: false,
    tenantIdOrName: TENANT
}), function (req, token, done) {
    // Send response
});

崩溃错误跟踪 - _http_outgoing.js:356 throw new Error('Can\'t set headers after they are sent.'); ^

错误:发送后无法设置标头。在 \node_modules\passport\lib\middleware\authenticate.js:156:13)

PHP代码=>

$headers = array ('Authorization: bearer ' . $Requestheader['id_token']);
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ( $ch, CURLOPT_URL, 'http://serverhost/auth/getUser' );
curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers );
return curl_exec ( $ch );

我该如何从我这边处理这个错误,谢谢。

4

1 回答 1

0

Node.js 是在单线程中运行的,如果不处理错误会崩溃。这是关于 Node.js 中的异常处理的一个非常有用的线程:

Node.js 最佳实践异常处理

于 2017-10-10T05:29:03.960 回答