进入项目的controllers目录
cd D:\AllProjects\CppProjects\web\testweb\controllers
创建一个controller
drogon_ctl create controller -h china::guangdong::User
在visual studio 2019的项目的controllers筛选器中添加现有项china_guangdong_User.cc和china_guandong_User.
china_guangdong_User.h
#pragma once
#include <drogon/HttpController.h>
using namespace drogon;
namespace china{
namespace guangdong{
class User : public drogon::HttpController<User>{
public:
METHOD_LIST_BEGIN
METHOD_ADD(User::login, "/token?userId={1}&passwd={2}", Post);
METHOD_ADD(User::getInfo, "/{1}/info?token={2}", Get);
METHOD_LIST_END
void login(const HttpRequestPtr& req,
std::function<void(const HttpResponsePtr&)>&& callback,
std::string&& userId,
const std::string& password);
void getInfo(const HttpRequestPtr& req,
std::function<void(const HttpResponsePtr&)>&& callback,
std::string userId,
const std::string& token) const;
};
}
}
chna_guangdong_User.cc
#include "china_guangdong_User.h"
using namespace std;
using namespace china::guangdong;
// Add definition of your processing function here
void User::login(const HttpRequestPtr& req,
function<void(const HttpResponsePtr&)>&& callback,
string&& userId,
const std::string& password)
{
cout << "User " << userId << " login";
//Authentication algorithm, read database, verify identity, etc...
Json::Value ret;
ret["result"] = "ok";
ret["token"] = drogon::utils::getUuid();
auto resp = HttpResponse::newHttpJsonResponse(ret);
callback(resp);
}
void User::getInfo(const HttpRequestPtr& req,
function<void(const HttpResponsePtr&)>&& callback,
string userId,
const std::string& token) const
{
cout << "User " << userId << " get his information";
//Verify the validity of the token, etc.
//Read the database or cache to get user information
Json::Value ret;
ret["result"] = "ok";
ret["user_name"] = "Jack";
ret["user_id"] = userId;
ret["gender"] = 1;
auto resp = HttpResponse::newHttpJsonResponse(ret);
callback(resp);
}
使用Postman测试请求获取用户信息
这里的token是意思一下的,逻辑上并没有验证功能。
http://127.0.0.1:8099/china/guangdong/user/token?userId=1001&passwd=123456
http://127.0.0.1:8099/china/guangdong/user/1001/info?token=0C3D3EC2-9B9C-423C-B92D-D2E2CEE1819C