AssertionError [ERR_ASSERTION]: handler (func) is required in mongodb

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (433)

我正在使用mongooose连接mongodb,但我收到了以下错误

/Users/uchitkumar/api/node_modules/mongodb/lib/mongo_client.js:804
          throw err;
          ^

AssertionError [ERR_ASSERTION]: handler (func) is required
    at new AssertionError (internal/errors.js:315:11)
    at _toss (/Users/uchitkumar/api/node_modules/assert-plus/assert.js:22:11)
    at Function.out.(anonymous function) [as func] (/Users/uchitkumar/api/node_modules/assert-plus/assert.js:122:17)
    at process (/Users/uchitkumar/api/node_modules/restify/lib/server.js:1352:20)
    at argumentsToChain (/Users/uchitkumar/api/node_modules/restify/lib/server.js:1361:12)
    at Server.serverMethod [as put] (/Users/uchitkumar/api/node_modules/restify/lib/server.js:1475:21)

我的连接代码如下

server.listen(config.port, function() {

    mongoose.connection.on('error', function(err) {
        console.log('Mongoose default connection error: ' + err)
        process.exit(1)
    })

    mongoose.connection.on('open', function(err) {

        if (err) {
            console.log('Mongoose default connection error: ' + err)
            process.exit(1)
        }

        console.log(
            '%s v%s ready to accept connections on port %s in %s environment.',
            server.name,
            config.version,
            config.port,
            config.env
        )

        require('./routes')

    })

    global.db = mongoose.connect(config.db.uri)

})

路线代码

server.get('/', function indexHTML(req, res, next) {
    fs.readFile(__dirname + '/../index.html', function (err, data) {
        if (err) {
            next(err);
            return;
        }

        res.setHeader('Content-Type', 'text/html');
        res.writeHead(200);
        res.end(data);
        next();
    });
});

这很好......我改变了一些东西,现在它停止了这个错误。错误是它无法在mongodb客户端中声明某些函数。它需要一个功能。是否要求添加一些处理函数?在哪里添加,提前谢谢

提问于
用户回答回答于

handler (func) is required 如果您的某个路由或中间件未定义,则是通过restify引发的错误。

例如:

server.put('/foo/');

这也会触发它:

var myMidelware = undefined; // todo: define this

app.put('/route', myMiddleware, (req, res) => { /* todo: handle req */ })

handler (func) is required当它试图验证这myMidelware是一个函数时,这将抛出错误。

我没有在你发布的路线代码中看到,但我认为它正在以某种方式发生。你在某处定义了PUT方法吗?

(server.get(),server.post()等也会发生同样的错误,但是[as put]堆栈跟踪中的错误表明它在server.put()调用时出现了阻塞。)

请参阅https://github.com/restify/node-restify/blob/v7.2.1/lib/server.js#L1386

另外,我不相信这个错误与mongodb有什么关系; mongo就在堆栈中,因为你在mongo连接打开处理程序中运行require('./routes'),错误来自您的路线文件。令人讨厌的是,mongo的错误处理正在丢失部分堆栈跟踪。如果你移动require('./routes')到mongo之外,它会给你正确的堆栈跟踪。

扫码关注云+社区

领取腾讯云代金券