使用Mongoose连接MongoDB时触发AssertionError错误求助
解决Mongoose连接MongoDB时的AssertionError(handler(func) is required)
先给你理清一下:这个错误不是Mongoose连接本身导致的,而是Restify框架抛出的——从错误栈里的restify/lib/server.js和Server.serverMethod [as put]就能看出来,问题出在你定义的某个PUT路由上,缺少了必要的处理函数(handler)。
错误原因分析
错误栈里的关键行:
at Server.serverMethod [as put] (/Users/uchitkumar/api/node_modules/restify/lib/server.js:1475:21)
这说明你在代码里调用了server.put()方法,但没有传入对应的处理回调函数。比如可能写成了这样:
server.put('/your-path'); // 缺少后面的handler函数
而Restify要求每个路由方法(get/post/put等)必须传入处理函数,否则就会抛出这个handler (func) is required的断言错误。
解决步骤
检查路由文件中的PUT路由
打开你的./routes文件,找到所有server.put()的调用,确保每个调用都传入了完整的处理函数。比如正确的写法应该是:server.put('/your-path', function(req, res, next) { // 你的处理逻辑 res.send(200); next(); });找到遗漏handler的PUT路由,补上回调函数即可解决这个错误。
优化Mongoose连接代码(可选但推荐)
你的当前连接代码有个小问题:mongoose.connect()是异步操作,你直接赋值给global.db的写法不太规范,而且监听事件的顺序可以调整得更合理。推荐改成Promise风格的写法:server.listen(config.port, function() { mongoose.connect(config.db.uri) .then(() => { console.log('Mongoose default connection opened successfully'); 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'); }) .catch(err => { console.log('Mongoose default connection error: ' + err); process.exit(1); }); });这样能确保路由是在数据库连接成功后才加载,避免路由中操作数据库时出现未连接的问题。
总结
当前的核心问题是Restify的某个PUT路由缺少处理函数,先检查并修复路由定义,这个错误就能解决。Mongoose连接的问题只是表象,真正的诱因在路由配置上。
内容的提问来源于stack exchange,提问作者Uchit Kumar
相关产品推荐
相关产品推荐

