Hapi js投掷错误:已经关闭

时间:2015-02-09 07:05:00

标签: node.js exception hapijs

我使用Hapi.js作为我们API开发的框架,我在非常罕见的情况下遇到了错误。

2015-02-08T12:32:38.073Z - verbose: err.stack >  Error: Already closed
    at Object.exports.create (/var/www/ragchewAppServerSrc/ragchew_prod/ragchews/node_modules/hapi/node_modules/boom/lib/index.js:21:17)
    at Object.exports.internal (/var/www/ragchewAppServerSrc/ragchew_prod/ragchews/node_modules/hapi/node_modules/boom/lib/index.js:252:92)
    at /var/www/ragchewAppServerSrc/ragchew_prod/ragchews/node_modules/hapi/lib/request.js:297:34
    at iterate (/var/www/ragchewAppServerSrc/ragchew_prod/ragchews/node_modules/hapi/node_modules/items/lib/index.js:35:13)
    at done (/var/www/ragchewAppServerSrc/ragchew_prod/ragchews/node_modules/hapi/node_modules/items/lib/index.js:27:25)
    at validate (/var/www/ragchewAppServerSrc/ragchew_prod/ragchews/node_modules/hapi/lib/auth.js:283:20)
    at finish (/var/www/ragchewAppServerSrc/ragchew_prod/ragchews/node_modules/hapi/lib/protect.js:45:21)
    at wrapped (/var/www/ragchewAppServerSrc/ragchew_prod/ragchews/node_modules/hapi/node_modules/hoek/lib/index.js:798:20)
    at root (/var/www/ragchewAppServerSrc/ragchew_prod/ragchews/node_modules/hapi/lib/auth.js:198:50)
    at /var/www/ragchewAppServerSrc/ragchew_prod/ragchews/src/middlewares/auth/ragchew_auth_strategy.js:75:28
2015-02-08T12:32:38.073Z - verbose: err >  {"isBoom":true,"output":{"statusCode":500,"payload":{"statusCode":500,"error":"Internal Server 

我们都无法在测试环境中重现这一点,也不了解此错误的根本原因。

如果有人强调为什么/什么时候这个错误是由框架生成的,那将会很有帮助。

在我们的代码中,当我们尝试从“身份验证插件”发回回复时,会发生此错误。我们正在使用基本身份验证方案。

发生问题的示例代码段是:

exports.register = function (plugin, options, next) {
    plugin.auth.scheme('basic', function (server, options) {
        var settings = options;
        // some code here
        var scheme = {
            authenticate: function (request, reply) {
                // some code here
                // assign access token value to token here.

                settings.validateFunc.call(request, token, function (err, isValid, credentials) {
                    // handle error here.
                    return reply(null, { credentials: credentials });   // error occurs on this line
                });
            }
        };
        return scheme;
    });

    next();
};

1 个答案:

答案 0 :(得分:0)

你可以尝试return reply.continue({credentials: credentials});成功而不是你现在拥有的吗?

请参阅hapi-auth-basic中的这一行以供参考:

https://github.com/hapijs/hapi-auth-basic/blob/master/lib/index.js#L83