[英]How to pass request body object to other routes?
有人知道解决方案吗? 当我控制台记录变量时,它显示未定义。 我需要将 req.body(姓名和电子邮件)元素传递给第二个发布路线,即“/company”路线。 我有两个 forms 并且我想将第一个表单数据传递给第二个表单“/company”路由表单。 那么这两个表单数据将存储在 mongoDb 中。 我尝试了所有方法,但在第二条路线“/company”路线中只有未定义
import express from "express";
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
//Assign the name and email to variable and sent to last route
const middleware = (req, res, next) => {
const { name, email } = req.body;
let nameNew = name;
let emailNew = email;
// add nameNew and emailNew to req object
// so that it can be access in other routes
req.nameNew = nameNew;
req.emailNew = emailNew;
// console.log(nameNew);
// console.log(emailNew);
next();
};
//Get name email from user input and sent it middleware
app.post("/", middleware, (req, res, next) => {
const { name, email } = req.body;
res.send("Home route");
});
//Get the name and email from middleware
app.post("/company", middleware, (req, res) => {
// console.log(nameNew);
// access req.body without middleware
// console.log(req.body);
// access req.body using middleware
console.log(req.nameNew);
console.log(req.emailNew);
res.send("Company route");
});
//Server running
app.listen(4000, () => {
console.log(`Server Started `);
});
当您的请求进入您的app.post("/")
时,它会在中间件 scope 中设置nameNew
变量。 您无法在其他路线中访问此变量。
如果要访问从中间件共享的变量,可以使用res.locals
: https://expressjs.com/en/api.html#res.locals
您不能通过中间件将数据从路由 1 传递到路由 2。
它通过中间件并设置变量,但在您的res.send
上,这些变量将消失。 这些只是为传入请求的“实例”设置的,并且在res.send
上将被销毁。
您需要将数据发送回前端,以将其传回您的 API 用于路线 2。
您可以从路由定义中调用函数:
app.get('/getUserInfos', isLoggedIn, (req, res) => {
return getUserInfos(res);
});
这样您就可以处理您的数据并根据需要进行保存。
此外,看起来你可以在那里链接功能: https://stackoverflow.com/a/62723674/12343548
我使用 req.app.locals 将第一条路由中的数据发送到第二条路由。 任何人将来都想做这种类型的程序这是解决方案。
const express = require("express");
const app = express();
const path = require("path");
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
const middleware = (req, res, next) => {
const { name, email } = req.body;
req.app.locals.nameNew = name;
req.app.locals.emailNew = email;
next();
};
app.get("/", (req, res) => {
res.sendFile(path.join(__dirname + "/index.html"));
});
app.post("/", middleware, (req, res) => {
const { name, email } = req.body;
res.send("Home Route");
});
app.get("/company", (req, res) => {
res.sendFile(path.join(__dirname + "/company.html"));
console.log(req.app.locals.nameNew);
console.log(req.app.locals.emailNew);
});
app.post("/company", (req, res) => {
console.log(req.app.locals.nameNew);
console.log(req.app.locals.emailNew);
res.send("Company Route");
});
//Server running
app.listen(4001, () => {
console.log(`Server Started `);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.