我是节点 js 和 express 的新手。我今天能够获得我的第一个 Node JS 表单,它按预期工作。所以我想在 Express 上重新创建相同的内容,但由于某种原因,我在编程上失败了。我能够跟踪标题和正文,但由于某种原因,我无法理解为什么 Express 会重写正文的处理方式。
我正在添加我的发现。下面是代码,这是通过 express 命令行工具生成的。这是app.js 文件,方法upload 是在找一些数据。目前我没有处理任何文件上传,我只是在寻找一些要遇到的文本。
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path');
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.get('/', routes.index);
app.get('/users', user.list);
/**custom stuff**/
app.post('/upload',function(req, res){
console.log(req.header('Content-Type'));
console.log(req.header('Host'));
console.log(req.header('User-Agent'));
console.log(req.body);
res.send("Hello the response is "+req.body.username);
});
/** end**/
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
现在我对该函数进行 curl 调用。
curl -d '{"username":"myname"}' -H 'Content-Type: application/x-www-form-urlencoded' http://localhost:3000/upload
这些是标题和正文。(标题在第 3 行结束,正文在第 4 行)
application/x-www-form-urlencoded
localhost:3000
curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
{ '{"username":"myname"}': '' }
POST /upload 200 7ms - 36b
现在,我使用了 Google Chrome 的Advanced Rest Client App,下面是标题和正文。
application/x-www-form-urlencoded
localhost:3000
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36
{ username: 'myname from adv rest client app' }
POST /upload 200 5ms - 58b
因此,让我感到困惑的一件事是,为什么其余客户端应用程序发出的请求的主体格式正确且完整,而我的请求主体却被扭曲了。任何人都可以在这里帮我解决这个问题。
谢谢