搭建Express.js服务器遇TypeError:Cannot read properties of undefined (reading 'push')
Express.js TypeError: Cannot read properties of undefined (reading 'push') 解决方法
错误信息:
/home/runner/log-in-API/node_modules/express/lib/router/index.js:513 this.stack.push(layer); ^ TypeError: Cannot read properties of undefined (reading 'push') at Function.route (/home/runner/log-in-API/node_modules/express/lib/router/index.js:513:14) at file:///home/runner/log-in-API/api/reviews.route.js:4:8 at ModuleJob.run (node:internal/modules/esm/module_job:198:25) at async Promise.all (index 0) at async ESMLoader.import (node:internal/modules/esm/loader:385:24)
核心问题
问题出在api/reviews.route.js文件中:你将express.Router当作属性直接赋值,但它是一个构造方法,必须调用它(添加())才能生成有效的路由实例。
错误代码
import express from 'express' const router = express.Router router.route('/').get((req, res) => { res.send('Hello world') }) export default router
修正后代码
import express from 'express' // 调用Router方法生成路由实例 const router = express.Router() router.route('/').get((req, res) => { res.send('Hello world') }) export default router
补充说明
- 直接赋值
express.Router时,router变量指向的是方法本身而非实例化的路由对象,调用router.route('/')时内部无法找到this.stack属性,因此抛出该错误。 - 另外你的
index.js中注释了ReviewsDAO的导入语句,但代码里仍在调用await ReviewsDAO.injectDB(client),后续启用DAO功能时记得取消注释导入,否则会触发新的错误。
内容的提问来源于stack exchange,提问作者jvbicera03bn
相关产品推荐
相关产品推荐

