#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}