一个简单的博客后端服务器
github地址,持续更新
设计参考

#define MYSQLPP_MYSQL_HEADERS_BURIED
#include "httplib.h"
#include "rapidjson/document.h"
#include <mysql++/mysql++.h>
#include <iostream>
#include <string>
using namespace std;namespace {const string blog_db = "blog_system";const string blog_table = "blog_table";// 下面是数据库服务器的信息,我用的腾讯 mysql 数据库,需配置你自己的服务器信息const string blog_server = "";const string blog_user = "";const string blog_pass = "";const int blog_port = ;
}int main() {using namespace httplib;using namespace mysqlpp;using namespace rapidjson;mysqlpp::Connection conn(false);conn.set_option(new mysqlpp::SetCharsetNameOption("utf8"));if (conn.connect(blog_db.c_str(), blog_server.c_str(), blog_user.c_str(),blog_pass.c_str(), blog_port)) {cout << "success" << endl;} else {exit(0);}Server svr;svr.Get("/", [](const Request& req, Response& res) {cout << "/" << endl;res.set_content("hello world!", "text/plain");});svr.Get("/hi", [](const Request& req, Response& res) {cout << "hi" << endl;res.set_content("Hi", "text/plain");});svr.Post("/hello", [](const Request& req, Response& res) {res.set_content("hello post", "text/plain");});svr.Post("/blog", [&](const Request& req, Response& res) {Document d;cout << req.method << endl;cout << req.path << endl;cout << req.remote_addr << endl;cout << req.body << endl;if (d.Parse(req.body.c_str()).HasParseError()) {cout << "parse" << endl;return 1;}auto title = d["title"].GetString();auto content = d["content"].GetString();auto tag_id = d["tag_id"].GetInt();auto create_time = d["create_time"].GetString();unique_ptr<char> sql(new char[strlen(content) * 2 + 4096]);sprintf(sql.get(), "insert into blog_table values(null, '%s', '%s', '%d', '%s')",title, content, tag_id, create_time);cout << sql.get() << endl;mysqlpp::Query query = conn.query(string(sql.get()));try {query.execute();} catch(const mysqlpp::BadQuery& er) {cout << "query error :" << er.what() << endl;return -1;}});svr.listen("localhost", 1234);
}
  • CMakeLists.txt
cmake_minimum_required(VERSION 3.10)project (blog)set(CMAKE_CXX_STANDARD 11)include_directories(include)add_executable(service service.cpp)target_link_libraries(service pthread mysqlpp)

关注我的公众号

C++实现一个http服务器相关推荐

  1. 从零开始一个http服务器(五)-模拟cgi

    从零开始一个http服务器-模拟cgi(五) 代码地址 : https://github.com/flamedancer/cserver git checkout step5 运行: make cle ...

  2. php树莓派养鱼,树莓派学习11: 将树莓派变成一个Web服务器

    将树莓派变成一个Web服务器,通过访问网页,就可以控制树莓派,比如:查看摄像头\开灯等等. 一想到Linux Web服务器,我们首先想到的是,Apache + MySql + Php. 树莓派可以安装 ...

  3. js websocket同步等待_WebSocket硬核入门:200行代码,教你徒手撸一个WebSocket服务器...

    本文原题"Node.js - 200 多行代码实现 Websocket 协议",为了提升内容品质,有较大修订. 1.引言 最近正在研究 WebSocket 相关的知识,想着如何能自 ...

  4. 一文读懂tomcat组件--一个web服务器的架构演化史

    1. tomcat是谁? 2. tomcat可以做什么? tomcat是一个web容器,可以将web应用部署到tomcat,由它提供web服务,一个web容器中可以部署多个web应用,这些web应用可 ...

  5. 在Linux中搭建一个FTP服务器

    在Linux中搭建一个ftp服务器,以供两个工作小组保管文件使用.禁用匿名.第一个小组使用ftp账号:ftp1,工作目录在:/var/ftp/ftp1:第二个小组使用ftp2,工作目录在:/var/f ...

  6. php开发ftp服务器搭建教程,在Linux中搭建一个FTP服务器

    在Linux中搭建一个ftp服务器,以供两个工作小组保管文件使用.禁用匿名.第一个小组使用ftp账号:ftp1,工作目录在:/var/ftp/ftp1:第二个小组使用ftp2,工作目录在:/var/f ...

  7. gitblit如何迁移入gitlab合并迁移_github仓库迁移到gitlab以及gitlab仓库迁移到另一个gitlab服务器...

    一. github仓库迁移到gitlab 先进入 new project: 选择 Import project, 选择下面的github: 进入后,这里需要github的 personal acces ...

  8. tftp c++ 上传_如何在 Fedora 上建立一个 TFTP 服务器

    TFTP 即简单文本传输协议,允许用户通过 UDP 协议在系统之间传输文件. -- Curt Warfield(作者) TFTP 即 简单文本传输协议(Trivial File Transfer Pr ...

  9. Linux中搭建一个ftp服务器详解

    来源:Linux社区  作者:luzhi1024 详解Linux中搭建一个ftp服务器. ftp工作是会启动两个通道: 控制通道 , 数据通道 在ftp协议中,控制连接均是由客户端发起的,而数据连接有 ...

  10. 在node.js中建立你的第一个HTTp服务器

    这一章节我们将从初学者的角度介绍如何建立一个简单的node.js HTTP 服务器 创建myFirstHTTPServer.js //Lets require/import the HTTP modu ...

最新文章

  1. 问题:# mount –t ntfs /dev/sdb1 /mnt/ 解决办法
  2. Mybatis映射文件动态SQL语句-01
  3. Java如何校验中文乱码_java如何判断是否中文乱码
  4. Spring Cloud 第二天课堂笔记
  5. oracle的基本命令,Oracle基本命令
  6. windows服务开发(一、安装)
  7. OpenCV人工智能图像处理学习笔记 第4章 线段文字绘制
  8. 蒟蒻的代码规范与文档编写规范
  9. 数据库服务器sa 密码修改,修改vcenter数据库账号密码
  10. word表格怎么缩小上下间距_word文档中表格怎么缩小行间距
  11. SpringBatch 实列学习《一》
  12. 【酷毙了】野火新版fireTools多功能调试助手,有Windows和Linux版本,就问你喜不喜欢。...
  13. linux 域名解析 命令,Linux动态域名解析命令脚本
  14. python生成树状图_python 字典生成树状图
  15. SAP Local WebIDE Access denied
  16. vue-03-4:vue封装方法到工具类
  17. String metric
  18. 谷歌地球如何下载使用高程数据
  19. JAVA毕设项目家庭记账系统(java+VUE+Mybatis+Maven+Mysql)
  20. Python基础——流程控制之循环语句

热门文章

  1. 高内聚,低耦合——8大核心中间件,微服务基础技术栈技术图谱
  2. 一键转发抢红包源码及搭建教程
  3. 王凯1987计算机系,计算机科学与技术系王凯:付出总有回报
  4. 移动端 长按事件_Flutter事件监听
  5. attr和prop的区别以及在企业开发中应该如何抉择
  6. 送福利:ROKID 语音开发板免费送,开启你的物联网之旅
  7. axios请求超时,设置重新请求的完美解决方法
  8. css3 flex 布局
  9. 修改webpack的publicPath为动态设置以适配公司活动平台
  10. Java中转发(Forward)和重定向(Redirect)的区别