【问题标题】:How to set up an update route in Express如何在 Express 中设置更新路由
【发布时间】:2020-06-17 14:56:30
【问题描述】:

我正在构建一个 MEVN 堆栈 CRUD 应用程序(Vue、Node、Express、MongoDB)。我正在尝试为我的应用设置以下 Express 路由...

postRoutes.post('/update/:id', async(req, res)=> {
    const collection = await loadPostsCollection();
    let id = req.params.id;
    let result = await collection.findOne(req.params.id)
    if (!result) {
      res.status(404).send("data is not found");
    }
    else {
        result.title = req.body.title;
        result.body = req.body.body;
        result.updateOne();
    }
});

..为了根据该数据的 id 更新特定数据。点击前端的更新按钮并触发updatePost()方法后...

    updatePost() {
      let uri = `http://localhost:4000/posts/update/${this.$route.params.id}`;
      this.axios.post(uri, {
        title: this.post.title,
        body: this.post.body
      }).then(() => {
        this.$router.push({name: 'posts'});
      });
    }

...上面的快速路由不执行。我也尝试过像这样配置路由...

postRoutes.post('/update/:id', async(req, res)=> {
    const collection = await loadPostsCollection();
    let id = req.params.id;
    let result = await collection.findOne({
      _id: new mongodb.ObjectId(id)
    });
    if (!result) {
      res.status(404).send("data is not found");
    }
    else {
        result.title = req.body.title;
        result.body = req.body.body;
        result.updateOne();
    }
});

但这也不起作用。知道如何设置更新路线吗?

这是我所有的路线:

const express = require('express');
const postRoutes = express.Router();
const mongodb = require('mongodb')

postRoutes.get('/', async (req, res) => {
  const collection = await loadPostsCollection();
  res.send(await collection.find({}).toArray());
});

postRoutes.post('/add', async (req, res) => {
  const collection = await loadPostsCollection();
  let task = req.body;
  await collection.insertOne(task);
  res.status(201).send();
});

postRoutes.get("/edit/:id", async (req, res) => {
  const collection = await loadPostsCollection();
  let id = req.params.id;
  let result = await collection.findOne({
    _id: new mongodb.ObjectId(id)
  });
  if (!result) {
    return res.status(400).send("Not found");
  }
  res.status(200).send(result);
});

postRoutes.post('/update/:id', async(req, res)=> {
    const collection = await loadPostsCollection();
    let id = req.params.id;
    let result = await collection.findOne({
      _id: new mongodb.ObjectId(id)
    });
    // let result = await collection.findOne(req.params.id)
    if (!result) {
      res.status(404).send("data is not found");
    }
    else {
        result.title = req.body.title;
        result.body = req.body.body;
        result.updateOne();
    }
});

postRoutes.delete('/delete/:id', async (req, res, next) => {
  const collection = await loadPostsCollection();
  collection.deleteOne({ _id: mongodb.ObjectId(req.params.id) });
  res.status(200).send({});
});

async function loadPostsCollection() {
  const client = await mongodb.MongoClient.connect(
    'mongodb+srv://jsfanatik:1qaz2wsx@cluster0-lv686.mongodb.net/test?retryWrites=true&w=majority',
    {
      useNewUrlParser: true
    }
  );
  return client.db("test").collection("todos")
}

module.exports = postRoutes;

【问题讨论】:

  • 您可以从添加一些错误处理开始。您似乎没有对任何 await 语句进行错误处理。每个使用await 的路由都应该用try/catch 括起来,这样您就可以捕获任何错误并记录错误并发送错误响应。
  • “这也不起作用”是什么意思?您的客户是否收到错误消息?服务器上记录的任何错误?我们希望您进行基本调试并报告您所做的和观察到的,因为此类问题不是我们自己可以重现的。您的postRoutes.post('/update/:id',...) 路线是否被调用?如果是这样,它进入函数体的距离有多远?哪里出了问题。
  • 你能显示你注册postRoutes路由器的代码吗?
  • 控制台不会记录错误,但更新后也不会重定向回posts 组件。我检查了updatePost() 方法设置是否正确。
  • 正如@jfriend00 所说,您似乎没有注册路线

标签: javascript node.js mongodb express vue.js


【解决方案1】:

您请求的 URL 是 /posts/update/:id,但我在任何快速路由器中都看不到该路径。 你在你的路由器中错过/posts

postRoutes.post('/update/:id', async(req, res)=> {
    const collection = await loadPostsCollection();
    let id = req.params.id;
    let result = await collection.findOne(req.params.id)
    if (!result) {
      res.status(404).send("data is not found");
    }
    else {
        result.title = req.body.title;
        result.body = req.body.body;
        result.updateOne();
    }
});

【讨论】:

    猜你喜欢
    • 2021-02-07
    • 1970-01-01
    • 2015-07-05
    • 2020-10-05
    • 1970-01-01
    • 2014-04-21
    • 2020-04-09
    • 2017-01-03
    • 2020-06-16
    相关资源
    最近更新 更多