ExpressJS中的POST请求问题

3
我正在使用NodeJS,并且正在让用户上传文件。但是现在,我甚至无法成功进行一个简单的POST请求。
在我的index.ejs文件中,我有一些代码创建了一个表单,然后发送了一个POST请求:
<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,但是点击按钮会出现错误“无法POST /upload”。

谢谢!

3个回答

13

server.get 意味着处理 HTTP GET 请求。你需要使用 server.post。提供信息的话,“Cannot XXX /uri” 错误是 express 在没有匹配任何请求且未配置 404 错误处理程序时响应的错误。


3
哦,现在我感觉非常愚蠢。我以为这件事情会很蠢,但没想到是这么大的事情。谢谢! - Catherine Hwang

4

使用server.get(),你正在指示该路由仅响应GET请求,但表单显然是POST请求。

你应该使用server.post()

如果你想让它响应GET和POST请求(以及其他每种HTTP动词),也可以使用server.any()


3

您应该使用Felix Geisendö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进行文件上传就像这样简单。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接