【发布时间】:2019-03-15 12:33:38
【问题描述】:
为了解决这个问题:我并不是真的在这个问题中发布错误!
问题
我最近发现我的 Node.js 和 Express 后端代码存在问题,同时从前端发出多个请求。假设我的一个端点如下所示:
var payload, id1, id2, data1, data2
exports.someFunction = async (req, res) => {
payload = req.body.payload
id1 = req.params.id1
id2 = req.query.id2
try {
data1 = await fetchData1()
data2 = await fetchData2()
return responseHandler.success({ data1, data2 })
} catch (err) {
return responseHandler.error(err)
}
}
async function fetchData1() {
return new Promise((resolve, reject) => {
// fetch data from database by accessing
// payload, id1, id2
// here
})
}
我发现的问题是,在执行异步函数时,payload、id1 等全局变量被覆盖了。 (如果下一个请求是在第一个请求完成之前发出的)因此执行了一些输入错误的函数并出现了奇怪的响应。
解决方案
然后我的解决方案是将这些全局变量移到函数内部,这导致函数参数的大量使用:
exports.someFunction = async (req, res) => {
const payload = req.body.payload
const id1 = req.params.id1
const id2 = req.query.id2
try {
const data1 = await fetchData1(payload, id1, id2)
const data2 = await fetchData2(payload, id1, id2, data1)
return responseHandler.success({ data1, data2 })
} catch (err) {
return responseHandler.error(err)
}
}
async function fetchData1(payload, id1, id2) {
return new Promise((resolve, reject) => {
// fetch data from database
})
}
如您所见,代码变得非常混乱,这实际上是我首先使用全局变量的原因。
我的实际问题
- (1) 在 express 路由中使用“全局变量”是不是很傻?
- (2) 是否有更好的方法为其他函数提供数据,而不是每次都输入所有参数
- (3) 我的假设是否正确,即当新请求调用此特定路由时,那些“全局变量”会被覆盖?
【问题讨论】:
标签: javascript node.js express server backend