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

ct2axkht  于 2023-04-11  发布在  Node.js
关注(0)|答案(4)|浏览(242)

我已经看了很多这个问题的答案,但我还没有找到一个工作的解决方案。我试图使一个网络应用程序,你可以上传文件使用快递和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>
k4aesqcs

k4aesqcs1#

我也遇到了同样的问题。但后来我把multer版本改回0.1.8。一切正常。你可能需要修改package.json文件:"multer": "^0.1.8"

6rvt4ljy

6rvt4ljy2#

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

var tempPath = req.file.path,

因为这是你唯一一次请求“path”作为对象的属性。你的问题看起来很明显,你的请求中没有文件(也就是名为“req”的对象)。你应该在你的消费代码中记录或检查名为req的对象,以确保你在请求中有一个文件。

pqwbnv8z

pqwbnv8z3#

供参考错误:未定义路径
添加这一行
const path = require('node:path');
希望这个能正常工作。

kqqjbcuj

kqqjbcuj4#

我发现错误“无法读取未定义的属性路径”当使用multer在查找上传是由于传入的fileFilter选项,我正在使用文件我只允许类型.png和.jpg的文件,我一直发送到FormData()类型的jpeg文件.
当然,这可能不是你的问题,但如果你面临类似的挑战,值得研究一下。

相关问题