NodeJS App.Get订单错误

时间:2018-03-06 23:58:45

标签: node.js

我在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'静态,因为我不知道选择哪个类别等。

我该如何解决这种情况?感谢

ERROR

/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

简而言之,错误在子类别的代码中

1 个答案:

答案 0 :(得分:1)

关于阅读错误

从错误代码中,我看到的错误都来自此文件的代码,此处未共享。

/home/berkin/Projects/OSF_Academy/controllers/categoryController.js:28:40

我建议检查该文件,因为它说它找不到该行内的内容。

现在,回到你的路线。错误是相关的,原因有两个,

路线排序

路线的排序非常重要。它始终是先到先得。

如果您先/api/:something然后/:category,它将首先与/api匹配。

我可以继续深入阅读以下内容nl,而不是我再解释一下。

无错误捕获

如果您的路线出现错误,您应该抓住它,显示它并转到下一条路线。以下是来自实际的expressjs文档。在路线上,有requestresourcenext回调。

answer

所以我创建了一个错误处理程序并捕获它,然后继续next()enter image description here充满了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);