Express路由报错:Cannot read property 'caseSensitive' of undefined 求助
Express项目报错排查:TypeError: Cannot read property 'caseSensitive' of undefined
错误信息
TypeError: Cannot read property 'caseSensitive' of undefined at route (D:\node_js\myownapi\node_modules\express\lib\router\index.js:506:21) at Layer.handle [as handle_request] (D:\node_js\myownapi\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (D:\node_js\myownapi\node_modules\express\lib\router\index.js:328:13) at D:\node_js\myownapi\node_modules\express\lib\router\index.js:286:9 at Function.process_params (D:\node_js\myownapi\node_modules\express\lib\router\index.js:346:12) at next (D:\node_js\myownapi\node_modules\express\lib\router\index.js:280:10) at urlencodedParser (D:\node_js\myownapi\node_modules\body-parser\lib\types\urlencoded.js:91:7) at Layer.handle [as handle_request] (D:\node_js\myownapi\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (D:\node_js\myownapi\node_modules\express\lib\router\index.js:328:13) at D:\node_js\myownapi\node_modules\express\lib\router\index.js:286:9
问题代码
app.js
const express = require('express') const app = express() const {route} = require('./routes/route') app.use(express.static('./public')); app.use(express.json()); app.use(express.urlencoded()); app.use(route) app.listen(5000,()=>{ console.log('server is listening at port 5000...') })
route.js
const { items } = require("../data"); const express = require("express"); const route = express.Router(); route.get("/", (req, res) => { res .send('<h1>Home Page</h1><a href="/api/v1/items">products</a>') .status(200); }); route.get("/api/v1/items", (req, res) => { const newItems = items.map((item) => { const { id, name, img, price, desc, category } = item; return { id, name, img, price, desc, category }; }); res.json(newItems); }); route.get("/login.html", (req, res) => { res.sendFile(__dirname + "/public/sigup.html"); }); route.post("/", (req, res) => { console.log(req.body.emailid); if (req.body.emailid === "abc@gmail.com") { res.status(200).redirect("signup.html"); console.log(req.body.emailid); } else { route.get("/errormsg", (req, res) => { const msg = "please Enter valid Email id"; res.status(401).json({ msg }); }); } }); module.exports = route;
问题原因
- 导入方式错误:app.js里用了解构赋值
const {route} = require('./routes/route'),但route.js是默认导出module.exports = route,解构会得到undefined。把undefined传给app.use(),Express内部处理路由时找不到预期的router对象,就会抛出Cannot read property 'caseSensitive' of undefined错误。 - 动态添加路由的错误操作:route.js的POST请求处理函数里,else分支动态调用
route.get("/errormsg", ...),这不符合Express的路由定义规范——路由应该在应用启动前一次性定义完成,动态添加会导致路由栈异常,也可能触发类似错误。
修复方案
1. 修正app.js的导入方式
把解构导入改成默认导入:
// app.js里的导入语句替换成 const route = require('./routes/route')
2. 修正POST请求的错误处理逻辑
删除动态添加路由的代码,直接在else分支里返回错误响应,不需要新增路由:
route.post("/", (req, res) => { console.log(req.body.emailid); if (req.body.emailid === "abc@gmail.com") { res.status(200).redirect("signup.html"); console.log(req.body.emailid); } else { // 直接返回错误,不要动态加路由 const msg = "please Enter valid Email id"; res.status(401).json({ msg }); } });
另外补充两个小问题:
- route.js里的
res.sendFile(__dirname + "/public/sigup.html"),文件名拼写错误(sigup应该是signup),建议修正。 express.urlencoded()最好加上{extended: true}参数,避免后续解析表单数据时出现问题:app.use(express.urlencoded({extended: true}));
内容的提问来源于stack exchange,提问作者Divili Srikanth
相关产品推荐
相关产品推荐

