如何在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);
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);