【问题标题】:express.Router() delete not foundexpress.Router() 删除未找到
【发布时间】:2020-04-26 15:16:49
【问题描述】:

我正在创建一个 restAPI,但我没有让 express.Router () 删除方法工作

我正在寻找答案,但我找到的所有答案都与我所做的一致。

只有delete方法不行,其他都可以。

路线文件:

const express = require('express')
const CustumerController = require('../controllers/CustumerController')
const router = express.Router()

router.get('/customers', CustumerController.index)
router.get('/customers/:id', CustumerController.show)
router.post('/customers', CustumerController.store)
router.delete('/customers/:id', CustumerController.destroy)

module.exports = router

客户控制器.js

async destroy(req, res) {
  const { id } = req.params
  const result = await CustomerRepository.delete(req)
  res.json(result)
}

CustomerRepository.js

async destroy(id) {
  const clause = {
    where: { id }
  }

  try {
    return await Customers.destroy(clause)
  } catch (err) {
    return {
      statusCode: status.INTERNAL_SERVER_ERROR,
      message: status.classes['5XX_MESSAGE'],
      error: err
    }
  }
}

删除错误示例:

成功的例子,在get

我试过,在控制器上,用一个简单的对象来触发 res.json(),只是为了测试,但是没用,请求还不够。

问题好像真的出在express.Router的delete方法上

谢谢你的帮助

【问题讨论】:

  • 嗨@Henrique,请查看how to ask(请勿发布代码图片)。另外,您可以添加minimal reproducible example 来说明您遇到的问题吗?
  • 提供destroy函数体。
  • 嗨@mgarcia,感谢您的提示,我已经更新了我的问题。
  • @Saeed,我把destroy函数放在了问题中

标签: node.js express routes


【解决方案1】:

路由器编程好问题出在端点响应中我建议使用try catch详细分析错误

【讨论】:

  • 不完全是,问题正在被路由。我更详细地更新了问题
【解决方案2】:

您的代码一切正常,无需更改任何内容。调试它,首先尝试在删除 api 上返回 静态响应,而不是从数据库中删除数据。然后只有你会知道这个问题。

【讨论】:

    【解决方案3】:

    您的get 请求也不应该起作用!您在此行中将控制器命名为 CostumerController

    const CostumerController = require('../controllers/CostumerController')
    

    并使用CustumerController。我使用了你的代码,一切正常。

    index.js

    const express = require('express');
    const router = require('./router');
    const app = express();
    
    app.use(router);
    
    app.listen(8000, () => {
      console.log('Server started.')
    });
    

    CustomerController.js

    module.exports = {
      destroy: (req, res) => {
        res.status(200).send('destroy');
      },
      index: (req, res) => {
        res.status(200).send('index');
      },
      show: (req, res) => {
        res.status(200).send('show');
      },
      store: (req, res) => {
        res.status(200).send('store');
      }
    }
    

    还有router.js

    const express = require('express')
    const CustomerController = require('./CustomerController')
    const router = express.Router()
    
    router.get('/customers', CustomerController.index)
    router.get('/customers/:id', CustomerController.show)
    router.post('/customers', CustomerController.store)
    router.delete('/customers/:id', CustomerController.destroy)
    
    module.exports = router;
    

    【讨论】:

    • 嗨@Saeed。我最终在 Stackoverflow 上输入错误并与 Costumer 和 Customer 混淆,但是,根据上面的打印,get 方法和帖子也有效。在控制器中,我已经使用了一个和你类似的例子,只是用一个字符串触发发送,但问题是请求没有到达,它没有调用控制器
    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 2022-12-12
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2021-02-09
    • 2021-12-28
    相关资源
    最近更新 更多