我如何处理POST请求?

我如何处理POST请求?,post,d,vibed,Post,D,Vibed,我读到,有人能帮我处理POST请求吗?但我不清楚如何处理POST请求,我从页面发送到vibed服务器 我编写了下一个代码: 导入vibe.d; 进口std.stdio; void main() { 自动路由器=新路由器; 路由器。任何(“*”、&accControl); 路由器。任何(“/my”和操作); 自动设置=新的HTTPServerSettings; settings.port=8080; settings.bindAddresses=[“:”,“127.0.0.1”]; listenH

我读到,有人能帮我处理POST请求吗?但我不清楚如何处理POST请求,我从页面发送到vibed服务器

我编写了下一个代码:

导入vibe.d;
进口std.stdio;
void main()
{
自动路由器=新路由器;
路由器。任何(“*”、&accControl);
路由器。任何(“/my”和操作);
自动设置=新的HTTPServerSettings;
settings.port=8080;
settings.bindAddresses=[“:”,“127.0.0.1”];
listenHTTP(设置、路由器);
runEventLoop();
}
无效accControl(HTTPServerRequest-req、HTTPServerResponse-res)
{
res.headers[“访问控制允许源”]=“*”;
}
无效操作(HTTPServerRequest-req、HTTPServerResponse-res)
{
//如何从POST请求中获取字符串,以及如果服务器发送JSON对象,如何获取JSON对象。
}
但是我应该用什么方法来处理req呢?据我所知,expect POST body正在发送大量其他数据

正在使用JQuery发送POST请求:

$.post(“http://127.0.0.1:8080“,”答案\结果\“:777”);
所以我需要得到这个JSON并用vibed发送到DB。但我不明白如何处理这个问题。

主要是:

自动路由器=新的URLRouter;
router.post(“/url\u to\u match”、&action);
listenHTTP(设置、路由器);
行动:

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);
}
void操作(HTTPServerRequest-req、HTTPServerResponse-res)
{
自动应答结果=req.json[“应答结果”].to!int;
// ...
}

或者您可以使用。

下面是一个示例代码,演示如何从vibe.d读取POST参数:

主要功能:

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请求:

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

HTH

你能告诉我在
action(){}
中应该有什么函数吗?我不知道如何提取request.Thans,但为什么我会在Chrome
日志中看到它http://127.0.0.1:8080/my 404(未找到)
我想如果服务器启动,我应该看到状态
200
@user1432751您是否配置了路由器?例如,
router.post(“/my”、&action)我将开始主题中的示例更新为当前代码。在这个示例中,如果传入数据,则指定您的名称,但如果我不知道这个名称,该怎么办?你能演示一下如何处理简单文本,而不是json@user1432751您可以使用API进行完全扩展,我刚刚提供了用法示例。FYI
std.stdio.writeln
是阻塞I/O的一部分。您不应该在事件循环中使用它。我应该指出,
“\”answers\u result\”:777“
是无效的JSON。你的意思可能是
“{\”答案\结果\“:777}”
。JS提示:使用单引号。例如,
'{“答案”\u结果:777}'
-参见?无需转义
@sigrod,谢谢你的提示!但在Chrome控制台中,我看到在答案的第一个元素之前和最后一个元素之后有引号的字符串是什么?(->
“{”QID…
)和
90}”
[“{”QID:1,“AID”:5,“SubAID”:[],“MinArea”:10,“MaxArea”:90}]
当我创建JSON字符串时,我没有它们:
var answers\u string=(
{QID:question.id,“AID”:{u answer.id,“SubAID”:[SubAID\u val],
).replace(“question.id”,question.id)。replace(“\u answer.id”,“\u answer.id”);
为什么不干脆
JSON.stringify({QID:question.id,AID:\u answer.id,})