如何在node js中获取post方法之外的响应数据

How to get the response data outside the post method in node js

USER.JS

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const user = express.Router();
var username='';
app.use(bodyParser.json());
user.post('/',  (req, res) => {
    let First_Name = req.body.First_Name;
    // This SQL query is vulnerable to SQL injection attacks. You should use parameters in this. 
    let query = "INSERT INTO `user` (First_Name) VALUES ('" + First_Name + "')";
    db.query(query, (err, result) => {
        if (err) { 
            return res.status(500).send(err);
        }
        res.send('Success');
        console.log(result);
        console.log('User Created successfully !');
        username=First_Name;
    })
})


module.exports = {user:user};

Middle.js

const app = express();
const bodyParser = require('body-parser');
const middle = express.Router();
const {user}= require('./USER');
middle.post('/', (req, res, next) => {
    //doing some code
    const username = 'here i need to use the username i get from user.js page';
    });
    module.exports = {middle:middle};

SERVER.JS

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const {user}= require('./routes/USER');
const {middle}= require('./routes/Middle');
app.use(bodyParser.json());
app.use('/add', user);// here i am adding the user 
app.use('/middle', middle);// here i need to call the middle which uses the username entered in user post
app.get('/', (req, res) => res.json('Working!'));

// Basic 404 handler
app.use((req, res) => {
    res.status(404).send('Not Found');
});
app.listen(port, () => {
    console.log(`Server running on port: ${port}`);
});

在 middle.js 文件中,我想使用从 user.js 页面获取的用户名。

当用户在 React 页面中输入名字并提交时,它会被插入到 USER.js 页面的数据库中。我需要从 USER.js 调用 first_name 到 Middle.js 页面。我在 server.js 页面中调用了这两个 api。如何维护工作流程,例如一旦用户插入该值就会发送到中间 post 并执行一些其他功能,例如插入到 .txt 文件中?

我相信有一个简单的方法可以解决您的问题,您希望保存 用户名 以便在其他功能中使用它。

原因 用户名 在您的

中未定义
console.log(username);// i need the variable here after insert outside function

行是它会在启动时运行。所以 POST 还没有发生,当然变量也没有被填充。

你需要记住 I/O in Node.js 是异步的。所以 user.post(...) 处理程序不会阻塞主线程。

注意:正如@halfer 指出的那样,您使用的 SQL 查询存在严重的安全风险。 First_Name 应作为查询参数传递。

处理此问题的最佳方法是将用户名传递给另一个处理函数。

我还在用户路由中添加了设置 req.user 的示例。

如下所示:

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const user = express.Router();
var username='';
app.use(bodyParser.json());
app.use(user);
app.use(middleware);

user.post('/',  (req, res, next) => {
    let First_Name = req.body.First_Name;
    // This SQL query is vulnerable to SQL injection attacks. You should use parameters in this. 
    let query = "INSERT INTO `user` (First_Name) VALUES ('" + First_Name + "')";
    db.query(query, (err, result) => {
        if (err) { 
            return res.status(500).send(err);
        }
        res.send('Success');
        console.log(result);
        console.log('User Created successfully !');
        username=First_Name;
        userHandler(username);
        req.user = username;
        next();
    })
})

function middleware(req, res, next) {
    console.log("middleware: user:", req.user);
    next();
}

// Use this function to do whatever you wish with the user.
function userHandler(username) {
    console.log(`userHandler: Doing stuff with user: ${username}...`);
    /* Do whatever with the username variable... */
}


app.listen(7070);