首页 > 解决方案 > 如何在节点js中获取post方法之外的响应数据

问题描述

用户.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};

服务器.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 页面获取它。

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

标签: node.jspostresponse

解决方案


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

您的用户名未定义 的原因

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

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

您需要记住 Node.js 中的 I/O 是异步的。所以 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);

推荐阅读