我在nodejs中遇到了奇怪的错误。
我的申请在订单
时完美运作app.get('/api/:pid', productController.getColor);
app.get('/', homeController.index);
app.get('/:category/:subcategory/:category_product/:product', productController.index);
app.get('/:category/:subcategory/:category_product', categoryController.products);
app.get('/:category/:subcategory', categoryController.subcategory);
app.get('/:category', categoryController.index);
但是当我将订单更改为
时app.get('/', homeController.index);
app.get('/:category/:subcategory/:category_product/:product', productController.index);
app.get('/:category/:subcategory/:category_product', categoryController.products);
app.get('/:category/:subcategory', categoryController.subcategory);
app.get('/:category', categoryController.index);
app.get('/api/:pid', productController.getColor);
我的网站崩溃了。错误是如此无关紧要。我不知道为什么会发生
我猜想当nodejs检查所有网址和/ api / 65625499(我编写了id)符合' /:category /:subcategory'它崩溃了。
我不能做' /:category /:subcategory'静态,因为我不知道选择哪个类别等。
我该如何解决这种情况?感谢
/home/berkin/Projects/OSF_Academy/node_modules/mongodb/lib/utils.js:132
throw err;
^
TypeError: Cannot read property 'categories' of undefined
at /home/berkin/Projects/OSF_Academy/controllers/categoryController.js:28:40
at /home/berkin/Projects/OSF_Academy/node_modules/mongoose/lib/model.js:3930:16
at cb (/home/berkin/Projects/OSF_Academy/node_modules/mongoose/lib/query.js:1314:14)
at result (/home/berkin/Projects/OSF_Academy/node_modules/mongodb/lib/utils.js:413:17)
at executeCallback (/home/berkin/Projects/OSF_Academy/node_modules/mongodb/lib/utils.js:405:9)
at handleCallback (/home/berkin/Projects/OSF_Academy/node_modules/mongodb/lib/utils.js:128:55)
at self.close (/home/berkin/Projects/OSF_Academy/node_modules/mongodb/lib/cursor.js:934:60)
at handleCallback (/home/berkin/Projects/OSF_Academy/node_modules/mongodb/lib/utils.js:128:55)
at completeClose (/home/berkin/Projects/OSF_Academy/node_modules/mongodb/lib/cursor.js:1073:14)
at Cursor.close (/home/berkin/Projects/OSF_Academy/node_modules/mongodb/lib/cursor.js:1086:10)
at /home/berkin/Projects/OSF_Academy/node_modules/mongodb/lib/cursor.js:934:21
at handleCallback (/home/berkin/Projects/OSF_Academy/node_modules/mongodb-core/lib/cursor.js:178:5)
at setCursorNotified (/home/berkin/Projects/OSF_Academy/node_modules/mongodb-core/lib/cursor.js:555:3)
at /home/berkin/Projects/OSF_Academy/node_modules/mongodb-core/lib/cursor.js:664:16
at queryCallback (/home/berkin/Projects/OSF_Academy/node_modules/mongodb-core/lib/cursor.js:242:16)
at /home/berkin/Projects/OSF_Academy/node_modules/mongodb-core/lib/connection/pool.js:541:18
简而言之,错误在子类别的代码中
答案 0 :(得分:1)
从错误代码中,我看到的错误都来自此文件的代码,此处未共享。
/home/berkin/Projects/OSF_Academy/controllers/categoryController.js:28:40
我建议检查该文件,因为它说它找不到该行内的内容。
现在,回到你的路线。错误是相关的,原因有两个,
路线的排序非常重要。它始终是先到先得。
如果您先/api/:something
然后/:category
,它将首先与/api
匹配。
我可以继续深入阅读以下内容nl
,而不是我再解释一下。
如果您的路线出现错误,您应该抓住它,显示它并转到下一条路线。以下是来自实际的expressjs文档。在路线上,有request
,resource
和next
回调。
所以我创建了一个错误处理程序并捕获它,然后继续next()
。 充满了
next()
个回调示例。
您应该能够按照以下方式构建它们,首先匹配家用路由器,然后是api,最后如果剩下任何东西,它将尝试匹配类别。
app.get('/', homeController.index);
app.get('/api/:pid', productController.getColor); // <-- Put API first
app.get('/:category/:subcategory/:category_product/:product', productController.index);
app.get('/:category/:subcategory/:category_product', categoryController.products);
app.get('/:category/:subcategory', categoryController.subcategory);
app.get('/:category', categoryController.index);