当前位置: 首页 > 知识库问答 >
问题:

不处理的promise拒绝警告-不处理的promise拒绝警告

何星鹏
2023-03-14

我得到这个错误-

(节点:18420)未处理的PromisejectionWarning:TypeError:无法读取未定义的属性“name”

at C:\Users\ohrid\Desktop\backend2\routes\categories.js:27:24
at Layer.handle [as handle_request] (C:\Users\ohrid\Desktop\backend2\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\ohrid\Desktop\backend2\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\ohrid\Desktop\backend2\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\ohrid\Desktop\backend2\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\ohrid\Desktop\backend2\node_modules\express\lib\router\index.js:281:22     
at Function.process_params (C:\Users\ohrid\Desktop\backend2\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\ohrid\Desktop\backend2\node_modules\express\lib\router\index.js:275:10)
at Function.handle (C:\Users\ohrid\Desktop\backend2\node_modules\express\lib\router\index.js:174:3)
at router (C:\Users\ohrid\Desktop\backend2\node_modules\express\lib\router\index.js:47:12)
at Layer.handle [as handle_request] (C:\Users\ohrid\Desktop\backend2\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (C:\Users\ohrid\Desktop\backend2\node_modules\express\lib\router\index.js:317:13)
at C:\Users\ohrid\Desktop\backend2\node_modules\express\lib\router\index.js:284:7       
at Function.process_params (C:\Users\ohrid\Desktop\backend2\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\ohrid\Desktop\backend2\node_modules\express\lib\router\index.js:275:10)
at logger (C:\Users\ohrid\Desktop\backend2\node_modules\morgan\index.js:144:5)

(节点:18420)未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。要在未处理的promise拒绝时终止节点进程,请使用CLI标志--unhandled rejections=strict(请参阅https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)(拒绝id:1)

(节点:18420)[DEP0018]弃用警告:未处理的promise拒绝已弃用。将来,未处理的promise拒绝将终止节点。具有非零退出代码的js进程。

我的路线/categories.js:

const { Category } = require('../models/category')
const express = require('express')
const router = express.Router()
 
router.get(`/`, async (req, res) => {
    const categoryList = await Category.find()
 
    if (!categoryList) {
        res.status(500).json({ success: false })
    }
    res.status(200).send(categoryList)
})
 
router.get('/:id', async (req, res) => {
    const category = await Category.findById(req.params.id)
 
    if (!category) {
        res.status(500).json({
            message: 'The category with the given ID was not found.',
        })
    }
    res.status(200).send(category)
})
 
router.post('/', async (req, res) => {
    let category = new Category({
        name: req.body.name,
        icon: req.body.icon,
        color: req.body.color,
    })
    category = await category.save()
 
    if (!category)
        return res.status(400).send('the category cannot be created!')
 
    res.send(category)
})
 
router.put('/:id', async (req, res) => {
    const category = await Category.findByIdAndUpdate(
        req.params.id,
        {
            name: req.body.name,
            icon: req.body.icon || category.icon,
            color: req.body.color,
        },
        { new: true }
    )
 
    if (!category)
        return res.status(400).send('the category cannot be created!')
 
    res.send(category)
})
 
router.delete('/:id', (req, res) => {
    Category.findByIdAndRemove(req.params.id)
        .then((category) => {
            if (category) {
                return res
                    .status(200)
                    .json({
                        success: true,
                        message: 'the category is deleted!',
                    })
            } else {
                return res
                    .status(404)
                    .json({ success: false, message: 'category not found!' })
            }
        })
        .catch((err) => {
            return res.status(500).json({ success: false, error: err })
        })
})
 
module.exports = router

我的应用程序。js

const express = require('express')
const app = express()
const morgan = require('morgan')
const mongoose = require('mongoose')
const cors = require('cors')
const dotenv = require('dotenv')
require('dotenv/config')
 
app.use(cors())
app.options('*', cors())
 
//middleware
app.use(morgan('tiny'))
 
//Routes
const categoriesRoutes = require('./routes/categories')
const productsRoutes = require('./routes/products')
const usersRoutes = require('./routes/users')
const ordersRoutes = require('./routes/orders')
 
const api = process.env.API_URL
 
app.use(`${api}/categories`, categoriesRoutes)
app.use(`${api}/products`, productsRoutes)
app.use(`${api}/users`, usersRoutes)
app.use(`${api}/orders`, ordersRoutes)
 
mongoose
    .connect(
        'mongodb+srv://dani:Luka5678@cluster0.23wee.mongodb.net/e-shop?retryWrites=true&w=majority',
        {
            useNewUrlParser: true,
            useUnifiedTopology: true,
            dbName: 'e-shop',
        }
    )
    .then(() => {
        console.log('Database connection is ready')
    })
    .catch((err) => {
        console.log(err)
    })
 
app.listen(4000, () => {
    console.log('server is running on http://localhost:4000')
})

我应该换什么?

共有1个答案

冀弘济
2023-03-14

您的应用程序中没有任何错误处理层。

如果您使用Express v5及以上版本,返回Promise的路由处理程序和中间件将捕获错误,并自动调用Next(value)

否则,从异步函数中,您必须将它们传递给Next()函数,Express将在其中捕获并处理它们。

这样,您就不会得到UnHandledPromiseRejtionWarning

 类似资料:
  • 我试图让Fastif-cookie工作在我的NestJS项目,我收到以下错误: (节点: 38325)未处理的promise拒绝警告:类型错误:无法读取未定义的属性“装饰请求” 未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。要在未处理的promise拒绝时终

  • 我想在Repl上为我的游戏实现一个基本的排行榜。它,所以我创建了一个节点。js后端。这是我在后端的配置: 但是每当我尝试发布时,我都会得到以下错误: (节点:344)未处理的PromisejectionWarning:TypeError:无法读取null的属性“push” (节点:344)UnhandledPromiseRejtionWarning:未处理的promise拒绝。这个错误要么是由于抛

  • 我有以下验证函数检查用户是否存在: 以下使用Chai的测试应对此进行测试: 错误确实会被抛出,但是mocha在控制台中显示以下内容: 2)显示抛出,如果用户是未定义的(节点: 18587)UnhandledPromiseRejse警告:未处理的promise拒绝(拒绝id: 2):错误:用户不存在 所以我的问题是,我如何重写测试,让它捕捉到promise拒绝?

  • 我试图执行下面的代码,但它在管道中抛出未处理的promise拒绝警告。在本地,它工作正常,没有任何问题。 日志错误:找不到进程“3224”。(节点:836)未处理的PromisejectionWarning:#(节点:836)未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。c

  • 我正在与节点JS中的promise模式作斗争 我在db中寻找用户,然后用用户引用保存新实体,但当用户不在db中时,我应该返回拒绝,但我不确定如何正确地做到这一点。 有什么办法可以做得更好吗? btw:对不起,coffeescript :-[

  • 为了学习角度2,我正在尝试他们的教程。 我得到这样的错误: 我在SO中浏览了不同的问题和答案,但没有发现什么是“未处理的promise拒绝”。 有人能简单地解释一下它是什么,以及<code>错误:生成cmd ENOENT</code>是什么,当它出现时,我需要检查什么才能消除这个警告吗?