首页 > 解决方案 > route.patch 中的 For 循环不起作用。|| Exprees.js

问题描述

下面是我为 /:productId 定义的 route.patch 函数的一段代码

route.patch('/:productId',(req,res,next)=>{
    
    const id = req.params.productId;
    const updateOps = {};
    console.log(req.body);
    for (const ops of req.body) {
        updateOps[ops.propName] = ops.value;
        console.log(updateOps);
    }
    
    res.status(200).json({Message: 'Hi'});
});

for 循环之前的 console.log(req.body) 工作,但 for 循环内的 console.log(updateOps) 不工作。甚至 res.status(200).json({Message: 'Hi'}); 不管用 。我收到一条找不到路线的错误。基本上 for 循环之前的一切都在工作,而 for 循环之后的一切都不起作用。

你能告诉我我在哪里做错了吗?是我在 route.patch 中使用 for 循环的方式错误吗?非常感谢任何帮助。

谢谢

标签: express

解决方案


从评论中回答您关于错误处理的问题。您有以下中间件:

app.use((req, res, next) => {
    const error = new Error('Not found');
    //console.log(error.status) //console.log(error.message) 
    error.status = 404; //console.log(error.message) 
    next(error);
});

app.use((error, req, res, next) => {
    res.status(error.status || 500);
    res.json({
        error: {
            message: 'Route not found'
        }
    })
});

因此,对于每个请求,都会创建一个错误对象,您将其分配状态404并将其传递给下一个中间件。在那里您发送错误响应,并且由于状态已设置为404使用此状态。

实际上,您应该只删除创建错误的第一个中间件,因为这将针对每个请求完成。Express 已经处理了对不存在的路由的请求,并将返回一个404未找到的响应。您可以保留第二个中间件来处理任何其他未处理的错误(尽管您应该更改错误消息:))


推荐阅读