2015-07-19 1 views
1

Я пытаюсь обрабатывать запрос POST в моем маршрутизаторе koa. К сожалению, каждый раз, когда я пытаюсь отправить данные, используя мою форму, я ничего не получаю. Я попробовал koa-bodyparser, вам не повезло. Я использую Jade в качестве механизма шаблонов.Koa-router и POST

router.js:

var jade = require('jade'); 
var router = require('koa-router')(); 
var bodyParser = require('koa-bodyparser'); 
exports.enableRouting = function(app){ 
    app.use(bodyParser())  
    router.get('/game/questions', function *(next){ 
    this.status = 200; 
    this.body = jade.renderFile('game_questions.jade'); 
    }); 
    router.post('/game/questions', function *(next){ 
    console.log(this.request.body); 
    this.status = 200; 
    this.body = jade.renderFile('game_questions.jade'); 
    }); 
    app 
     .use(router.routes()) 
     .use(router.allowedMethods()); 
} 

и часть game_questions.jade:

form(method='post' id='New_Question_Form') 
    input(type='text', id='New_Question_Text') 
    input(type='submit' value='Add Question') 

this.request.body пуст, this.request возвращается: метод, URL и заголовок. Любая помощь ценится!

+1

try onerror https://github.com/koajs/bodyparser#options – monkey

+0

Пробовал - нет ошибки. Спасибо хотя :) – jwitos

+0

Не решила проблема. Хотя удалось обойти это, используя Socket.io, чтобы сохранить форму вместо отправки с помощью POST. Если кто-то любопытен [здесь есть разница на github] (https://github.com/jwitos/takismieszny/commit/a53e44b80ce474bcc30cda97cb8222ffeb666b51), как я это сделал. – jwitos

ответ

2

В случае, если кто натыкается на это в своих поисках, позвольте мне предложить КоА-орган, который может быть передан на запрос пост, как так:

var koa = require('koa'); 
var http = require('http'); 
var router = require('koa-router')(); 
var bodyParser = require('koa-body')(); 

router.post('/game/questions', bodyParser, function *(next){ 
    console.log('\n------ post:/game/questions ------'); 
    console.log(this.request.body); 
    this.status = 200; 
    this.body = 'some jade output for post requests'; 
    yield(next); 
}); 

startServerOne(); 

function startServerOne() { 
    var app = koa(); 
    app.use(router.routes()); 
    http.createServer(app.callback()).listen(8081); 
    console.log('Server 1 Port 8081'); 
} 

но что произойдет, если разместить данные были отправлены в/игры/вопросы, которые вы говорите? Давайте обратимся к завитушке в его бесконечной мудрости.

curl --data "param1=value1&pa//localhost:8081/game/questions' 
HTTP/1.1 200 OK 
Content-Type: text/plain; charset=utf-8 
Content-Length: 34 
Date: Thu, 17 Dec 2015 21:24:58 GMT 
Connection: keep-alive 

some jade output for post requests 

А на консоли журналов:

------ post:/game/questions ------ 
{ param1: 'value1', param2: 'value2' } 

И, конечно, если ваш нефрит неправильно не парсер тело не может спасти вас.