Я новичок в узле js & express. Сегодня я смог получить свою первую форму Node JS и работает так, как ожидалось. Поэтому я хотел воссоздать то же самое в Express, но по какой-то причине я программно терпит неудачу. Я могу отслеживать заголовки и тело вниз, но по какой-то причине я не понимаю, почему Экспресс переписывает способ обработки тела.Экспресс переписывает тело по вызову curl
Я добавлю свои выводы. Ниже приведен код, который был сгенерирован с помощью инструмента командной строки. Это файл app.js, загрузка метода ищет некоторые данные. В настоящий момент я не обрабатываю какие-либо загрузки файлов, я ищу только какой-то текст.
/**
* 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 -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
Теперь я Advanced Rest Client App для Google Chrome и ниже заголовков и тело.
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
Итак, одна вещь, которая сбивает с толку меня, почему тело за просьбу остальное приложение клиента быть хорошо сформированы и нетронутыми, а тело от моего запроса искажается. Может ли кто-нибудь помочь мне с этим здесь.
Спасибо
Попробуйте либо [ '-d«имя пользователя = myname'' ] (http://superuser.com/a/149335) или ['-H 'Content-Type: application/json''] (http://stackoverflow.com/a/477819), может быть? В противном случае, похоже, у вас есть несоответствие между используемым форматом данных (JSON) и указанным форматом (URL-кодирование). –
Получил! это была проблема. Можете ли вы добавить это как ответ, поэтому я могу закрыть этот вопрос – macha