Я считаю, что есть простое решение вашей проблемы, вы можете 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);