【问题标题】:While testing basic Nodejs CRUD API using postman, it gives error 'Cannot Post'. How to resolve this issue?在使用邮递员测试基本的 Nodejs CRUD API 时,它给出了错误“无法发布”。如何解决这个问题?
【发布时间】:2021-03-21 09:40:50
【问题描述】:

我创建了一个基本的 Nodejs CRUD 和身份验证 API。 在使用 Postman 测试新订单的基本创建操作时,它返回状态码 404,响应正文为“无法发布”。

错误:

        <html lang="en">
        <head>
        <meta charset="utf-8">
        <title>Error</title>
        </head>
        <body>
        <pre>Cannot POST /order/addorder</pre>
        </body>
        </html>

API 逻辑似乎对我和路由器都是正确的。

module.exports.add_order = auth, async (req, res) => {
    try {
        const { productName, quantity } = req.body;
        if (!productName || !quantity)
            return res.status(400).json({ msg: "Not all fields have been entered" });
        const existingorder = await Order.findOne({ productName });
        if (existingorder)
            return res.status(400).json({ msg: "A product with this name already exists" });
        
        const newOrder = await new Order({
            productName,
            quantity,
            userId: auth.user,
            timestamp
        });
        const savedOrder = await newOrder.save();
        res.json(savedOrder);
    } catch (err) {
        res.status(500).json({ error: err.message });
    }
    
}

auth 函数是一个验证 JWT 的中间件函数。

路由器:


orderrouter.get('/readorder', ordercontroller.read_order);
orderrouter.post('/addorder', ordercontroller.add_order);
orderrouter.put('/updateorder', ordercontroller.update_order);
orderrouter.delete('/deleteorder', ordercontroller.delete_order);
 


module.exports = orderrouter;

【问题讨论】:

  • 您的代码当前所做的是:module.exports.add_order = auth;,然后它创建了一个未使用的async 函数。将其设为数组:module.exports.add_order = [auth, async (req, res) =&gt; {}];。另外,以防万一,由于您没有显示这部分,您是否正确声明app.use('/order', orderrouter);
  • 是的,我已经在 server.js 主文件中声明了 app.use('/order', orderrouter); 函数。数组方法奏效了。但我不明白它是如何工作的。
  • 当你声明一个路由时,你是在传递它的中间件。有时,您只有 1 个中间件(您自己的功能); app.post('/foo', () =&gt; {}),有时您想通过将多个参数作为单独的参数传递来链接它们:app.post('/foo', auth, () =&gt; {})。但是为了方便,Express 还允许你传递一个数组,而不是不同的参数。对于像您这样的用例:app.post('/foo", [auth, () =&gt; {}])
  • 知道了。谢谢。 :)

标签: javascript node.js express jwt postman


【解决方案1】:

错误表明您正在访问 /order/addorder,但在您的路由器中您只有 /addorder

确保您的组路线具有 /order 前缀

【讨论】:

    猜你喜欢
    • 2021-05-13
    • 2021-02-18
    • 2021-07-30
    • 2019-08-05
    • 2022-11-15
    • 2020-11-16
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多