【问题标题】:Node.js TypeError: Cannot read property 'path' of undefinedNode.js TypeError:无法读取未定义的属性“路径”
【发布时间】:2018-02-26 14:20:36
【问题描述】:

我已经针对同一个问题查看了很多答案,但我还没有找到可行的解决方案。我正在尝试制作一个网络应用程序,您可以使用 express 和 multer 上传文件,但我遇到了一个问题,即没有文件被上传并且 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>

【问题讨论】:

    标签: node.js express multer


    【解决方案1】:

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

        var tempPath = req.file.path,
    

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

    【讨论】:

    • 是的,你说得对,文件未定义。你能建议我在这里缺少什么吗?
    • 尝试执行以下操作: console.log(JSON.stringify(req)) 然后查看对象,它可能对您有所帮助。我没有足够的东西来告诉你出了什么问题,但是如果我是的话,我会检查属性的名称(也许你打错了或者你寻找的属性不是那样调用的),我会设置几个 console.log 以确保收集/发送/接收的内容确实是您认为的内容。如果您仍然找不到,请上传一个工作(我的意思是一个可运行的;))示例,以便我们可以调试代码。
    • 这里是代码,github.com/hemanik/imgPloadr。这是book 的一个例子
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我发现在 find upload 中使用 multer 时出现错误“Cannot read property path of undefined”是由于传入了fileFilter 选项,我使用的是 File 我只允许 .png 和 .jpg 类型的文件,我一直发送到FormData() jpeg 类型的文件。

      当然,这可能不是你的问题,但如果你面临类似的挑战,值得研究一下。

      【讨论】:

        猜你喜欢
        • 2015-11-22
        • 1970-01-01
        • 1970-01-01
        • 2021-12-29
        • 1970-01-01
        • 2020-05-15
        • 2015-05-25
        • 2021-12-31
        • 2021-11-24
        相关资源
        最近更新 更多