Как настроить маршрут обновления в Express - PullRequest
1 голос
/ 05 марта 2020

Я создаю приложение CRUD для стека MEVN (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();
    }
});

.., чтобы обновить определенные c данные на основе идентификатора этих данных. После нажатия кнопки обновления на передней панели и запуска метода 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'});
      });
    }

... вышеприведенный маршрут express не выполняется. Я также попытался настроить маршрут так ...

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;

1 Ответ

0 голосов
/ 16 марта 2020

Вы запрашиваете URL-адрес /posts/update/:id, но я не вижу этот путь ни в одном маршрутизаторе 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();
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...