Node.js TypeError:无法读取属性';路径';未定义的
对于同一个问题,我已经看了很多答案,但我还没有找到有效的解决方案。我正在尝试制作一个web应用程序,您可以使用express和multer将文件上载到,但我遇到了一个问题,即没有上载任何文件,并且req.file始终未定义 Express和multer版本为:Node.js TypeError:无法读取属性';路径';未定义的,node.js,express,multer,Node.js,Express,Multer,对于同一个问题,我已经看了很多答案,但我还没有找到有效的解决方案。我正在尝试制作一个web应用程序,您可以使用express和multer将文件上载到,但我遇到了一个问题,即没有上载任何文件,并且req.file始终未定义 Express和multer版本为: “express”:“^4.15.4”, “multer”:“^1.3.0” 我的configure.js如下所示: multer = require('multer'); module.exports = function(app)
“express”:“^4.15.4”,
“multer”:“^1.3.0”
我的configure.js如下所示:
multer = require('multer');
module.exports = function(app) {
app.use(morgan('dev'));
app.use(multer({
dest: path.join(__dirname, 'public/upload/temp')}).single('file'));
routes(app);
app.use('/public/', express.static(path.join(__dirname, '../public')));
消费代码如下所示:
var tempPath = req.file.path,
ext = path.extname(req.file.name).toLowerCase(),
targetPath = path.resolve('./public/upload/' + imgUrl + ext);
if (ext === '.png' || ext === '.jpg' || ext === '.jpeg' || ext === '.gif') {
fs.rename(tempPath, targetPath, function(err) {
if (err) throw err;
res.redirect('/images/' + imgUrl);
});
} else {
fs.unlink(tempPath, function() {
if (err) throw err;
res.json(500, {error: 'Only image files are allowed.'});
});
}
<form method="post" action="/images" enctype="multipart/form-
data">
<div class="panel-body form-horizontal">
<div class="form-group col-md-12">
<label class="col-sm-2 control-label"
for="file">Browse:</label>
<div class="col-md-10">
<input class="form-control" type="file"
name="file" id="file">
</div>
</div>
表单如下所示:
var tempPath = req.file.path,
ext = path.extname(req.file.name).toLowerCase(),
targetPath = path.resolve('./public/upload/' + imgUrl + ext);
if (ext === '.png' || ext === '.jpg' || ext === '.jpeg' || ext === '.gif') {
fs.rename(tempPath, targetPath, function(err) {
if (err) throw err;
res.redirect('/images/' + imgUrl);
});
} else {
fs.unlink(tempPath, function() {
if (err) throw err;
res.json(500, {error: 'Only image files are allowed.'});
});
}
<form method="post" action="/images" enctype="multipart/form-
data">
<div class="panel-body form-horizontal">
<div class="form-group col-md-12">
<label class="col-sm-2 control-label"
for="file">Browse:</label>
<div class="col-md-10">
<input class="form-control" type="file"
name="file" id="file">
</div>
</div>
浏览:
我打赌您的错误信息在这行
var tempPath = req.file.path,
因为这是您唯一一次要求将“路径”作为对象的属性。您的问题似乎很清楚,您的请求中没有文件(也就是称为“req”的对象)。
您应该在消费代码中记录或检查名为req的对象,以确保请求中有文件。我遇到了相同的问题。但随后我将multer版本改回
0.1.8
。一切正常。您可能需要更改package.json
文件:
“multer”:“^0.1.8”
我发现在查找上载中使用multer时出现“无法读取未定义的属性路径”错误是由于传入了fileFilter
选项,我正在使用File
我只允许.png和.jpg类型的文件,并且我一直发送到FormData()
jpeg类型的文件
当然,在您的情况下,这可能不是问题所在,但如果您面临类似的挑战,则值得研究。是的,您是对的,文件未定义。你能告诉我这里缺少什么吗?试着做以下操作:console.log(JSON.stringify(req)),然后看看这个对象,它可能会对你有所帮助。我没有足够的东西来告诉您出了什么问题,但是如果我是,我会检查属性的名称(可能是您输入了一个错误,或者您查找的属性不是这样命名的),我会设置几个console.log以确保收集/发送/接收的内容与您认为的内容完全一致。如果您仍然无法找到,请上传一个工作(我指的是runnable;))示例,以便我们可以调试代码。这就是一个例子