node.js - 如何在节点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 文件?
解决方案
我相信有一个简单的解决方案可以解决您的问题,您希望保存用户名,以便在其他功能中使用它。
您的用户名未定义 的原因
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);
推荐阅读
- google-cloud-platform - Velostrata 从本地迁移到 GCP。错误日志:echo boot 失败,等待磁盘联机
- python - 检查数据框值 +/- 1 是否存在于给定列中的其他任何位置
- aws-lambda - 来自 Api Gatway 的带参数的异步 Lambda 调用
- roslyn - Roslyn - 将编辑的文档保存到物理解决方案
- android - 在传递依赖项之前,我怎么能不能构造它们?
- python - Python - 在 Django 2 中创建多种用户类型和电子邮件作为用户名字段
- python - 在 PyWeka 中使用包(Python Weka Wrapper)
- c# - 以编程方式,如何指定要放置表 C# 的数据库
- ruby-on-rails - Capistrano rails 应用程序部署失败。服务器无法向 Github 识别自己。权限被拒绝(公钥)
- c++ - 如何一次向 std::vector 添加多个值?