你需要正确申报
fileName
和
userProfilePic
变量作为局部变量。当您不将它们声明为本地时,它们将成为隐式全局变量,并在不同的请求之间“共享”,这很容易导致争用条件,因为一个请求处理程序会覆盖另一个请求处理程序正在使用的值。更改为:
userRouter.get('/user/profile-pic', function (req, res) {
let userName = req.query.username;
let fileName = './profile-pics/' + userName + '.jpg';
let userProfilePic = userName + '.jpg';
fs.exists(fileName, function (exists) {
if (exists) {
console.log('Sending back picture ' + userProfilePic);
res.status(200).contentType('image/png').sendFile(userProfilePic, {
root: path.join(__dirname, '../profile-pics/')
}, function (err) {
if (err) {
console.log(err);
}
});
}
})
});
另外,您还需要在所有代码路径中发送响应,例如文件不存在或错误处理程序中。通过路由处理程序的所有路径都应调用
next()
或者自己发送响应。
仅供参考,通过linter运行代码和/或在严格模式下运行代码将使这些编程错误更加明显。