我是初学者,正在尝试学习Nodejs,我正在尝试使用express上传文件。
这是我的js文件:Express5.js
var express = require('express');
var path = require('path');
var fs = require('fs');
var app = express();
var bodyParser = require('body-parser');
var data='';
var multer = require('multer');
app.use(express.static(path.join(__dirname,'tmp')));
app.use(bodyParser.urlencoded({extended :false}));
app.use(multer({ dest : '/tmp/' }).single('file1'));
app.get('/express_upload.html',function(req,res){
req.sendFile(__dirname+"/"+"express_upload.html");
});
app.post('/form_upload',function(req,res){
console.log("Name : "+req.file.name);
console.log("Path"+req.file.path);
console.log("Type"+req.file.type);
var myfile = __dirname+"/"+req.file.name;
fs.readFile(req.file.path,function(req,resp){
fs.writeFile(myfile,data,function(err){
if(err){
console.log(err);
}else{
response = {
msg : "File uploaded successfully!",
filename : req.file.name
};
}
console.log(response);
res.end(JSON.stringify(response));
});
});
});
var server=app.listen(8081,function(){
var host = server.address().address;
var port = server.address().port;
console.log("Example app listening at http://%s:%s", host, port)
});
这是我的html表单:express_upload.html
<html>
<head>
<title>Index</title>
</head>
<style>
h2, h3{
color:Crimson;
text-align:center;}
</style>
<body bgcolor="MistyRose">
<h2 >Welcome</h2>
<hr>
<h3>Node.js </h3>
<form action="http://127.0.0.1:8081/form_upload" method="POST" enctype="multipart/form-data">
<input type="file" name="file1" size=50>
<br>
<br><br>
<input type="submit" value="UploadFile">
</form>
</body>
每当我尝试上传文件时,它都会出错。无法读取属性'file'为null。
错误:
C:\Users\nikita\Documents\NodeJspractice>node express5.js
Example app listening at http://:::8081
Name : undefined
Path\tmp\de5a6a92ec86094615cd1690e2821248
Typeundefined
C:\Users\nikita\Documents\NodeJspractice\express5.js:33
filename : req.file.name
^
TypeError: Cannot read property 'file' of null
at C:\Users\nikita\Documents\NodeJspractice\express5.js:33:21
at FSReqWrap.oncomplete (fs.js:135:15)
我尝试了大部分能够理解的解决方案,但我无法解决这个问题。如果您发现任何错误或可以提出解决方案,请提供帮助。 谢谢
答案 0 :(得分:1)
您在第26行覆盖了req
对象。
Nodejs回调中的约定总是在发生错误时将Error
对象作为第一个参数返回,或者如果没有发生错误则传递null
作为第一个参数。
在你的情况下 - 没有错误 - 所以第26行中的req
paremter得到null
。和null-没有file
属性。
第17行:
res.sendFile
代替req.sendFile
。
第21行:
req.file.originalname
代替req.file.name
。
第23行的Ind:
req.file.mimetype
代替req.file.type
。
使用VSCode(或任何其他IDE)来帮助您调试代码。在任何步骤放置断点并观察变量包含的内容。