Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js TypeError:无法读取属性';路径';未定义的_Node.js_Express_Multer - Fatal编程技术网

Node.js TypeError:无法读取属性';路径';未定义的

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)

对于同一个问题,我已经看了很多答案,但我还没有找到有效的解决方案。我正在尝试制作一个web应用程序,您可以使用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>
表单如下所示:

    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;))示例,以便我们可以调试代码。这就是一个例子