gpt4 book ai didi

node.js - NodeJS App.Get 订单错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:11:47 25 4
gpt4 key购买 nike

我在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检查所有url并且/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

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

最佳答案

关于读取错误

从错误代码中,我看到的所有错误都在该文件的代码中,该文件未在此处共享。

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

我建议检查该文件,因为它说无法在该行中找到某些内容。

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

路线排序

路线的顺序非常重要。总是先到先得。

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

无需我再次解释这一点,您可以继续深入阅读以下内容 answer .

没有错误捕获

如果您的 route 有错误,您应该捕获它,显示它并移动到下一条路线。以下内容来自实际的expressjs 文档。在路由上,有请求资源next回调。

enter image description here

因此,我将创建一个错误处理程序并捕获它,然后继续执行 next()expressJS doc充满了 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);

关于node.js - NodeJS App.Get 订单错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49141992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com