Node.js TypeError: Cannot read property 'path' of undefined
Node.js TypeError: Cannot read property 'path' of undefined
对于同一个问题,我已经看了很多答案,但我还没有找到可行的解决方案。我正在尝试制作一个网络应用程序,您可以使用 express 和 multer 将文件上传到该应用程序,但我遇到了一个问题,即没有文件正在上传并且 req.file 始终未定义。
表达和多版本为:
"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,
因为这是您唯一一次请求 "path" 作为对象的 属性。您的问题似乎很清楚,您的请求中没有文件(也就是名为 "req" 的对象)。
您应该在使用代码时记录或检查名为 req 的对象,以确保您在请求中有一个文件。
我遇到了同样的问题。但后来我将 multer 版本改回 0.1.8
。一切正常。您可能需要更改 package.json
文件:
"multer": "^0.1.8"
我发现在find upload中使用multer报错"Cannot read property path of undefined"是因为传入了fileFilter
选项,我是用的File
我只允许 .png 和 .jpg 类型的文件,我一直发送到 FormData()
jpeg 类型的文件。
当然,这可能不是您遇到的问题,但如果您面临类似的挑战,则值得研究一下。
对于同一个问题,我已经看了很多答案,但我还没有找到可行的解决方案。我正在尝试制作一个网络应用程序,您可以使用 express 和 multer 将文件上传到该应用程序,但我遇到了一个问题,即没有文件正在上传并且 req.file 始终未定义。
表达和多版本为:
"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,
因为这是您唯一一次请求 "path" 作为对象的 属性。您的问题似乎很清楚,您的请求中没有文件(也就是名为 "req" 的对象)。 您应该在使用代码时记录或检查名为 req 的对象,以确保您在请求中有一个文件。
我遇到了同样的问题。但后来我将 multer 版本改回 0.1.8
。一切正常。您可能需要更改 package.json
文件:
"multer": "^0.1.8"
我发现在find upload中使用multer报错"Cannot read property path of undefined"是因为传入了fileFilter
选项,我是用的File
我只允许 .png 和 .jpg 类型的文件,我一直发送到 FormData()
jpeg 类型的文件。
当然,这可能不是您遇到的问题,但如果您面临类似的挑战,则值得研究一下。