Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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 NodeJS FileUpload-无法读取未定义的属性_Node.js_Express_Mongoose - Fatal编程技术网

Node.js NodeJS FileUpload-无法读取未定义的属性

Node.js NodeJS FileUpload-无法读取未定义的属性,node.js,express,mongoose,Node.js,Express,Mongoose,我在用NodeJS,ExpressJS,mongoose,EJS 上传表格: <form method='post' enctype='multipart/form-data'> <input type='text' name='photo[name]'/> <input type='file' name='photo[image]'/> <input type='submit' value='Upload'/> </

我在用NodeJS,ExpressJS,mongoose,EJS

上传表格:

<form method='post' enctype='multipart/form-data'>
    <input type='text' name='photo[name]'/>
    <input type='file' name='photo[image]'/>
    <input type='submit' value='Upload'/>
</form>
app.js

var app = express();
...
app.set('view engine', 'ejs');
app.use(express.logger('dev'));
app.use(express.bodyParser());
...
路线:

var Photo = require('../models/Photo');
var path = require('path');
var fs = require('fs');
var join = path.join;

exports.submit = function (dir) {
    return function(req, res, next){
        var img = req.files.photo.image;
        var name = req.body.photo.name || img.name;
        var path = join(dir, img.name);
        fs.rename(img.path, path, function(err){
            if (err)
                return next(err);
            Photo.create({
                name: name,
                path: img.name
            }, function (err) {
                if (err)
                    return next(err);
                res.redirect('/');
            });
        });
    };
};
尝试上载时出现的问题:

500 TypeError: Cannot read property 'photo' of undefined

我也遇到了同样的问题,我所做的就是向bodyParser对象传递几个选项

app.use(express.bodyParser({ keepExtensions: true, uploadDir: __dirname + '/public/photos' }));

在我添加了该选项后,我觉得一切都很好。

使用“连接多方”并将其包含在路由文件中:

var multipart=require('connect-multiparty');
然后用作:

app.post('/uploads',multipart(),function(req,res){
    // ...
});

我试过你的代码,效果很好。哪一行抛出错误,
var img=…
var name=…
?错误在
var name=req.body.photo.name | img.name上传文件后出错。这是我尝试的。请注意,我更改了
bodyParse
的上载目录,以避免分区问题。@rvidal,你能上载图像文件吗?是的,它起作用了。顺便说一句,要点有一个输入错误(
filez
),但我尝试了其他方面。
app.post('/uploads',multipart(),function(req,res){
    // ...
});