我正在尝试使用Express NodeJS框架上传图像文件,但它不断抛出此错误:
Express
500 TypeError: Cannot read property 'image' of undefined
这是我的app.js
:
var express = require('express');
var routes = require('./routes');
var uploads = require('./routes/uploads');
var http = require('http');
var path = require('path');
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.bodyParser());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'public')));
app.use(app.router);
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.get('/', routes.index);
app.post('/uploads', uploads.uploads);
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
这是upload.js
:
var fs = require("fs");
exports.uploads = function(req, res){
//console.log(req.files);
fs.readFile(req.files.image.path, function (err, data) {
console.log("Request handler upload was called");
var imageName = req.files.image.name;
console.log(imageName);
if(!imageName){
console.log("There was an error")
res.redirect("/");
res.end();
} else {
var newPath = __dirname + "/uploads/" + imageName;
fs.writeFile(newPath, data, function (err) {
res.redirect("/uploads/" + imageName);
});
}
});
}
我在类似的问题上尝试了其他答案,包括使用bodyParser()函数并将输入标记的名称参数设置为我的 index.jade
还有其他可能的解决方案吗?
答案 0 :(得分:2)
我想到了两件事:
如果以上都不能帮助您,请查看您是否可以修改此要点https://gist.github.com/bogdanbiv/eec255655c5aca8ae2de以使其与您的用例类似。它现在不起作用,因为我不知道在索引模块中放什么 - require(' ./ index');
请注意,要点不允许创建文件夹。我知道将服务器代码放在与上传文件夹相同的文件夹中是一个安全噩梦,但它仅用于调试目的。
答案 1 :(得分:0)
我刚遇到这个问题,如果查看日志,则不推荐使用bodyParser()。
https://github.com/senchalabs/connect/wiki/Connect-3.0
他们列出了几个要使用的中间件。我修改为使用" busboy"它现在工作正常。
回购中有一些例子 https://github.com/mscdex/busboy
答案 2 :(得分:0)
您可以像这样重定向用户:
res.redirect('/images/' + req.file.filename);
对象文件包含:
{ fieldname: 'image',
originalname: 'Final copy.png',
encoding: '7bit',
mimetype: 'image/png',
destination: './public/upload/temp',
filename: 'image-1460839230171',
path: 'public/upload/temp/image-1460839230171',
size: 8441
}