ExpressJS中的POST请求问题

时间:2011-07-16 05:45:56

标签: javascript node.js express

我正在使用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,但点击按钮会出现错误“无法发布/上传”。

谢谢!

3 个答案:

答案 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,这只是一个简单的文件上传。