我正在使用NodeJS,我正在努力让用户上传文件。现在虽然我在尝试获得简单的POST请求时遇到了很多问题。
在我的index.ejs文件中,我有一些代码可以创建表单,然后发送一个帖子请求:
<div id="uploaddiv">Upload things here<br>
<form action="/upload" enctype="multipart/form-data" method="post">
<input type="text" name="title"><br>
<input type="file" name="upload" multiple="multiple"><br>
<input type="submit" value="Upload">
</form>
</div>
然后在server.js中,我有处理上传的代码。
var server = express.createServer();
//bunch of stuff left out
server.get('/upload', function(req, res) {
console.log("uploading!");
if (req.method.toLowerCase() == 'post') {
res.write('lol');
}
});
我的问题是直接导航到localhost / upload会正确调试console.log,但点击按钮会出现错误“无法发布/上传”。
谢谢!
答案 0 :(得分:13)
server.get
表示处理HTTP GET。你想要server.post
。 FYI“Can not XXX / uri”错误是当没有活动路由与请求匹配且没有配置404错误处理程序时表达响应。
答案 1 :(得分:4)
通过使用server.get()
,您指示该路由仅响应GET请求,但表单显然是POST。
您应该使用server.post()
。
如果您希望它同时响应GET和POST(以及其他每个HTTP动词),也可以使用server.any()
。
答案 2 :(得分:3)
您应该使用FelixGeisendörfer的node-formidable上传文件。
var express = require('express'),
app = express.createServer(),
util = require('util'),
formidable = require('formidable');
app.get('/upload', function (req, res){
res.writeHead(200, {'content-type': 'text/html'});
res.end(
'<form action="/upload" enctype="multipart/form-data" method="post">'+
'<input type="text" name="title"><br>'+
'<input type="file" name="upload" multiple="multiple"><br>'+
'<input type="submit" value="Upload">'+
'</form>');
});
app.post('/upload', function (req, res) {
var form = new formidable.IncomingForm();
form.uploadDir = '.';
form.keepExtensions = true;
form.parse(req, function(err, fields, files) {
res.writeHead(200, {'content-type': 'text/plain'});
res.write('received upload:\n\n');
res.end(util.inspect({fields: fields, files: files}));
});
return;
});
app.listen(3000, '127.0.0.1');
由于node-formidable,这只是一个简单的文件上传。