不能在node.js中发布

我想用node.js上传文件,刚刚尝试检查文件是否发送到服务器。 HTML

<html> <head> <title>File Uploading Form</title> </head> <body> <h3>File Upload:</h3> Select a file to upload: <br /> <form action="img" method="POST" enctype="multipart/form-data"> <input type="file" name="file" size="50" /> <br /> <input type="submit" value="Upload File" /> </form> </body> </html> 

JS

 var express = require("express"); var app=express(); var http=require("http").Server(app); app.get("/",function(req,res){ res.end("hello") }); app.get("/upload",function(req,res){ res.sendFile(__dirname + "/form.html") }) app.post("/img",function(req,res){ if(req.files){ console.log(req.files.file.name); } else{ console.log("ee") } }); http.listen(3000,function(){ console.log("listening on 3000") }) 

当我上传的东西,它会引发错误

无法读取未定义的文件

作为新的后端我不知道为什么发生,为什么服务器不接收文件?

你需要app.use()一个fileparser。 例如,你可以使用connect-busboy 。 您可以在上面的链接中获得更多关于选项和用法的信息; 一个简单的设置会是这样的:

 var busboy = require('connect-busboy'); app.use(busboy()); app.post("/img",function(req,res){ req.busboy.on('file', function (fieldname, file, filename, encoding, mimetype) { // ... }); req.busboy.on('field', function (key, value, keyTruncated, valueTruncated) { // ... }); req.pipe(req.busboy); // etc ... }); 

正如在上面的答案所述,你必须使用一个身体分析器的多部分机构,但更好的解决scheme是使用快递中间件multer ,它可以让你像使用OP一样使用req.files

另外,multer是build立在busboy之上的,它是node.js最快的多部分主体parsing器

与Muller:

 var express = require('express'), multer = require("multer"), app = express(); app.use(multer({ dest: path.resolve(__root + path.sep + config.get("localFolders").rawImages), limits: { files: 2 } })); // handle file upload app.post("/img", function (req, res, next) { var image = req.files.image; // do something with image; console.log(image.name); }); 

在上面提供的链接中查看multer的文档。 祝你好运。 🙂