繁体   English   中英

如何将请求体 object 传递给其他路由?

[英]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.localshttps://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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM