Node.js TypeError:无法读取未定义的属性“path”

时间:2017-09-18 06:12:05

标签: node.js express multer

我已经为同样的问题看了很多答案,但我还没有找到合适的解决方案。我正在尝试创建一个可以使用express和multer上传文件的Web应用程序,我遇到的问题是没有文件被上传,req.file总是未定义。

Express和multer版本:   "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>

3 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。但后来我将multer版本更改回f。一切正常。您可能需要更改0.1.8文件: package.json

答案 1 :(得分:-1)

我打赌你的错误信息在这一行

    var tempPath = req.file.path,

因为这是你唯一一次要求&#34;路径&#34;作为对象的属性。您的问题似乎很清楚,您的请求中没有文件(AKA称为&#34; req&#34;)。 您应该在消费代码中记录或检查名为req的对象,以确保您在请求中有一个文件。

答案 2 :(得分:-1)

我发现在查找上载中使用multer时出现错误“无法读取未定义的属性路径”是由于传递了fileFilter选项,我正在使用文件 我只允许.png和.jpg类型的文件,并且一直发送到jpeg类型的FormData()文件。

当然,这不是您的问题,但是如果您遇到类似的挑战,则值得调查。