我有一条hapi.js路线,我想推迟回复。我已经尝试存储reply
函数并稍后调用它,或将其包装在promise中,但是hapi总是立即响应500内部服务器错误响应。
存储回复以供日后使用:
var pendingReplies = {};
server.route({
method: "POST",
path: "/",
handler: function (request, reply) {
var id = generateId();
pendingReplies[id] = reply;
}
});
... // reply later by calling:
function sendResponse(id, data) {
pendingReplies[id](data);
}
我已尝试创建回复承诺:
handler: function (request, reply) {
var id = generateId();
return new Promise(function (resolve, reject) {
pendingReplies[id] = resolve;
}).then(function (data) {
return reply(data);
});
}
我尝试过使用reply().hold()
handler: function (request, reply) {
var id = generateId();
var response = reply().hold();
pendingReplies[id] = function (data) {
response.source = data;
response.send();
};
return response;
}
我尝试将reply().hold()
与Promise一起使用:
handler: function (request, reply) {
var id = generateId();
var response = reply().hold();
return new Promise(function (resolve, reject) {
pendingReplies[id] = resolve;
}).then(function (data) {
response.source = data;
response.send();
return response;
});
}
对于其中的每一个,一旦处理程序函数退出,我在节点控制台中得到500响应和以下输出:
Debug: internal, implementation, error Error: Uncaught error: socket hang up at createHangUpError (_http_client.js:198:15) at Socket.socketOnEnd (_http_client.js:283:23) at emitNone (events.js:72:20) at Socket.emit (events.js:163:7) at _stream_readable.js:891:16 at process._tickDomainCallback (node.js:388:13)
是否可以使用hapi从路由处理程序外部异步回复请求?
答案 0 :(得分:3)
如果您的处理程序中出现错误,hapi.js
将立即退出并提供500
状态代码。检查generateId()
是否为有效函数。
其余代码看起来适合您的第三个和第四个示例。 <{1}}返回后,必须reply().hold()
保持连接处于打开状态。