Идентификатор доступа к данным, сохраненным в MongoDB

#node.js #mongodb #express #pdf-generation #puppeteer

Вопрос:

У меня есть запрос POST, который сохраняет данные в базе данных, а затем запускает puppeteer для создания pdf-файла на основе только что сохраненных данных. Кукольник просматривает URL-адрес (get request /:id) и создает PDF-файл этой страницы. Все это происходит по одному почтовому запросу.

Мне нужно передать идентификатор данных, сохраненных в запросе POST, в переменную, которая позволит мне динамически добавлять идентификатор к URL-адресу, используемому в puppeteer. Это означает, что доступ к нужным данным из базы данных осуществляется, когда кукольник делает запрос GET на http://localhost:3000/${идентификатор}. При правильном идентификаторе правильные данные динамически передаются в мое представление с помощью EJS. Это означает, что puppeteer генерирует PDF-файл на основе данных, сохраненных в запросе POST.

На концептуальном уровне — мое приложение не может автоматически узнать, какой идентификатор данных я ищу, просто отправив запрос. Так что это единственный способ, которым я могу это сделать.

Мой код работает неправильно, потому что идентификатор не передается по URL await page.goto( -адресу http://localhost:3000/${идентификатор}`. Где я ошибаюсь? Я застрял на этом уже 2 недели и не могу найти решение.

Спасибо за вашу помощь.

 /* routes */
app.get("/form", (req, res) => {
  res.render("index");
});

app.get("/:id", (req, res) => {
  const id = params.id;
  Blog.findById(id).then((result) => {
    res.render("pdf", { blog: result });
  });
});

app.post("/", (req, res) => {
  const blog = new Blog({
    name: "Smileh",
    surname: "Smith",
    boiler: "ideal",
    installprice: "fiver",
    pmhun: "forty",
    pmsixty: "thirty",
    pmtwenty: "twenty",
    fuel: "gas",
    location: "kitchen",
    orientation: "vertical",
    ladders: "no",
    scaffolding: "no"
  });
  blog.save().then((result) => {
    //I need the ID of the data just saved to the database
    let id = {result.id}(async () => {
      const browser = await puppeteer.launch();
      const page = await browser.newPage();
      // I need to pass the data ID here into the URL
      await page.goto(`http://localhost:3000/${id}`, {
        waitUntil: "networkidle2"
      });
      await page.pdf({
        path: "quote8.pdf",
        format: "A2",
        printBackground: true
      });

      await browser.close();
    })();
  });
}); 

Комментарии:

1. Перед let id = {result.id} этим добавьте console.log(result); и добавьте зарегистрированную информацию в сообщение.

2. Вот console.log(результат) — snipboard.io/LuRXv1.jpg

3. Измените let id = {result.id} на let id = result._id .

4. Отлично, спасибо!

Ответ №1:

let id = result._id вместо let id = {result.id}