Как получить данные ответа вне метода post в node js - PullRequest
0 голосов
/ 21 февраля 2020

ПОЛЬЗОВАТЕЛЬ. 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};

Средний. 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}`);
});

Здесь посередине. js файл, я хочу использовать имя пользователя, получить его от пользователя. js страница.

Когда пользователь вводит имя на реагирующих страницах и отправляет его, оно вставляется в базу данных на странице USER. js. Мне нужно вызвать имя_пользователя от USER. js до середины. js страницы. Я называю оба apis на сервере. js страница. Как сохранить рабочий процесс, например, после того, как пользователь вставил это значение, отправляет его в среднюю запись и выполняет некоторые другие функции, например, вставку в файл .txt?

1 Ответ

0 голосов
/ 21 февраля 2020

Я считаю, что есть простое решение вашей проблемы, вы можете sh сохранить имя пользователя , чтобы вы могли использовать его в другой функции.

Причина, по которой имя пользователя не определено в строке

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

, заключается в том, что он будет запускаться при запуске. Таким образом, POST еще не произошел и, конечно, переменная не заполняется.

Необходимо помнить, что ввод / вывод в Node.js является асинхронным. Поэтому обработчик user.post (...) не будет блокировать основной поток.

Примечание: как отметил @halfer, используемый вами запрос SQL представляет серьезную угрозу безопасности. Имя First_Name должно быть передано в качестве параметра запроса.

Лучший способ справиться с этим - передать имя пользователя другой функции-обработчику.

Я также добавил пример настройки Требуется пользователь в маршруте пользователя.

Как показано ниже:

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);
...