Node.js 使用节点版本14.15.1时,Express Multer不工作
我有以下代码片段:Node.js 使用节点版本14.15.1时,Express Multer不工作,node.js,express,multer,Node.js,Express,Multer,我有以下代码片段: var fileUpload = multer({ storage: multer.diskStorage({ destination: function (req, file, cb) { cb(null, './uploads/') }, filename: function (req, file, cb) { cb(null, Date.now() + file.originalname) } }) }); r
var fileUpload = multer({
storage: multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './uploads/')
},
filename: function (req, file, cb) {
cb(null, Date.now() + file.originalname)
}
})
});
router.post("/addFile", fileUpload.single('newFile'), function (req, res) {
let _id = req.body.someId;
console.log("Adding File with id: " + _id);
// some database inserts and response
...
此代码在节点v12中100%正常工作。我可以上传任何大小的文件,但是一旦我切换到节点v14.15.1,对于任何大于60KB的文件,上传行为都会异常。查看文件系统,我可以看到上传工作,但是路由中没有执行任何内容。因此,我可以在文件系统上看到该文件,但不会执行console.log
和任何数据库命令
查看请求时,我似乎从未为节点14上大于60KB的文件返回响应头。我假设没有收到请求的响应头是上传失败的原因
下面是执行文件上载的javascript
var formData = new FormData();
formData.append('newFile', $("#newFile")[0].files[0]);
formData.append('someId', $('#someId').val());
$.ajax({
url: './addFile',
data: formData,
contentType: false,
processData: false,
type: 'POST',
success: function (data) {
console.log('success upload')
});
我找到了问题的原因,但不知道如何解决。如果我设置了
res.local
,则上传失败。如果我把它评论出来,上传就可以了。是否有人知道此问题的修复/解决方法:
app.use(function (req, res, next) {
req.connection = mysqlConnection;
res.locals = {
version: '1'
};
next();
});
app.use('/', indexRouter);
我将
req.connection
更改为req.dbconn
这似乎解决了问题
app.use(function (req, res, next) {
req.dbconn = mysqlConnection
res.locals = {
version: 'version'
};
next();
});
您的两行代码:
req.connection = mysqlConnection;
res.locals = {
version: '1'
};
应该避免,因为req.connection和在express中都是某种保留对象,第一个包含连接数据,如IP和其他头,而第二个应该用于作用域为当前请求的变量。根据您在代码中执行的其他操作,您将覆盖这两个,并且很可能会破坏在本例中显示为multer中的bug的内容。您已经修复了req.connection
问题,但仍然可能会中断使用res.locals
的其他中间件/函数,因此,您可以只添加自己的属性,而不是像这样重新初始化它:
res.locals.version = '1'
你完全正确。我的问题归结为
req.connection
,如果您提到这一点,那就太好了。感谢您指出我在重新初始化res.locals
时遇到的潜在问题,我将立即更改该代码。看起来我提到了request.connection(已弃用),尽管我自己已经回答了这个问题,但我会给您+50,因为您指出了我代码的其他问题。是的,您解决了实际问题,因为您对代码也有了更多的上下文,但这更多的是为了阐明为什么它会打破您的方式。尽管我仍然对节点版本为什么会影响这一点感到困惑,但我假设,由于节点13中不推荐使用req.connection
,节点14很可能正在破坏使用它的库代码,因此必须更新库以支持节点14。