2015-11-25 2 views
0

Может ли кто-нибудь помочь мне обработать запрос POST, я прочитал docs, но мне непонятно, как обращаться с запросом POST, который я отправляю со страницы, на vibed-сервер.vibed: Как я могу обрабатывать запрос POST?

Я написал следующий код:

import vibe.d; 
import std.stdio; 

void main() 
{ 

    auto router = new URLRouter; 
    router.any("*", &accControl); 
    router.any("/my", &action); 

    auto settings = new HTTPServerSettings; 
    settings.port = 8080; 
    settings.bindAddresses = ["::", "127.0.0.1"]; 

    listenHTTP(settings, router); 
    runEventLoop(); 
} 

void accControl(HTTPServerRequest req, HTTPServerResponse res) 
{ 
    res.headers["Access-Control-Allow-Origin"] = "*"; 
} 


void action(HTTPServerRequest req, HTTPServerResponse res) 
{ 
    // how get string from POST request here. And how get JSON object, if server send it. 
} 

но какой метод следует использовать для REQ? Как я понимаю, ожидание тела POST отправляет много других данных.

запрос POST отправляет с JQuery:

$.post("http://127.0.0.1:8080", "\"answers_result\":777"); 

Так что мне нужно, чтобы получить это JSON и отправить с vibed это к БД. Но проблема, которую я не могу понять, как ее обрабатывать.

+0

FYI 'std.stdio.writeln' является частью блокировки ввода-вывода. Вы не должны использовать его в цикле событий. – sibnick

+0

Я должен указать, что '' \ "answers_result \": 777 "' недействителен JSON. Вероятно, вы имели в виду '' {\ "answers_result \": 777} "'. – sigod

+1

JS tip: использовать одиночный кавычек. Например. '' {"answers_result": 777} ''- видите? Нет необходимости скрывать '' '. – sigod

ответ

0

В основной:

auto router = new URLRouter; 
router.post("/url_to_match", &action); 

listenHTTP(settings, router); 

Действие:

void action(HTTPServerRequest req, HTTPServerResponse res) 
{ 
    auto answers_result = req.json["answers_result"].to!int; 

    // ... 
} 

Или вы можете использовать registerRestInterface.

+0

Не могли бы вы показать, какая функция должна находиться в 'action() {}', я не понимаю, как извлечь запрос. –

+0

@ user1432751 Я обновил ответ. – sigod

+0

Thats, но почему я вижу в журнале Chrome 'POST http://127.0.0.1:8080/my 404 (не найдено)' Я думал, что если запустить сервер, я должен увидеть статус '200' –

0

Вот пример кода, чтобы показать, как читать POST PARAMS из vibe.d:

Основные функции:

shared static this() 
{ 
    auto router = new URLRouter; 
    router.post("/url_to_match", &action); 

    auto settings = new HTTPServerSettings; 
    settings.port = 3000; 
    listenHTTP(settings, router); 
} 

Действие:

void action(HTTPServerRequest req, HTTPServerResponse res) 
{ 
    // Read first POST parameter named "first_name" 
    auto firstName = req.form["first_name"]; 

    // Read second POST parameter named "last_name" 
    auto lastName = req.form["last_name"]; 

    // Prepare output to be sent to client. 
    auto name = "Hello %s, %s".format(lastName, firstName); 

    // Send data back to client 
    res.writeBody(name); 
} 

Построить программу и запустить ее , чтобы опробовать его на своем локальном компьютере, вы можете выполнить следующий простой запрос на завивание:

curl --data "first_name=kareem&last_name=smith" "http://localhost:3000/url_to_match" 

HTH

Смежные вопросы