1.路由:
CROW_ROUTE(app, "/")
.name("hello")([] {
return "Hello world";
});
在访问根目录时,服务器返回“Hello world”。这是标准的服务器返回方式。
2.html放置位置
只有在template文件夹下才能被识别。
也可以用crow::mustache::set_base(“.”)来设置路径。
不需要将html文件和css资源添加到工程,只要在template路径下即可。
3.html渲染
测试发现,如果直接双击html,在装饰文件夹路径正确的情况下,可以正常显示网络界面。但是使用crow::mustache::load_text返回html并显示时,无法正常显示。猜测是html渲染的问题,因此引出4对渲染的测试。
4.CROW的MUSTACLE模块
Mustacle的功能是为了在JSON中解析一些词,并作为返回的HTML中的部分内容。
【1】auto page = crow::mustache::load_text("path/to/template.html");
这种方式没有使用mustacle进行渲染,
【2】auto page = crow::mustache::load("path/to/template.html");
auto page = crow::mustache::compile("my mustache {{value}}")#这句好像不使用
CROW_ROUTE(app, "/h2/<string>")([](std::string name) { //
auto page = crow::mustache::load("fft.html"); //
crow::mustache::context ctx({ {"person", name} }); //
return page.render();
//return page.render(ctx); //
});
这种方法在返回的template.html中,可以把网页的my mustache值设置为value
Html中显示的{person}会被替换为url中的<string>,这样就实现了动态渲染。
这里hello {person}被替换为了 hello <hahh>
5.CROW无法正确显示html的原因:
解析html得到的命令会多一个“.”,正在排查原因。
(1)尝试:改变了日志级别后,没有出现后面的“.”,但是还是无法读取。
(2)新建static文件夹,把css让入static中,同时修改html里面css的路径。
当前文件结构
--+---static
--+---templates
--+---main.cpp
(3)把资源文件放入static中,然后修改templates的html文件中索引css的地址,就可以正常加载css和图片,并成功显示网页。
6.本地html缓存会影响界面显示。为什么修改html内容,本地html打开界面还是不变?因为chrome有缓存。需要清理浏览器的缓存,这样修改html才能观察到结果。
7.CROW的蓝图模块
crow的蓝图相当于是把路由的设置分块化进行。原先只能在main函数里面定义路由,现在可以在不同的cpp文件中定义路由,这样就可以在实例化对象的时候进行定义。这样就可以符合面向对象的思想,即对象生成-》对象设计某个函数-》对象设置路由地址以及返回函数。主函数就只要注册就行了。
【1】bp.h
class BP
{
public:
crow::Blueprint temp =crow::Blueprint("temp","static","templates");
BP();
~BP();
};
在某一个类中设置一个蓝图对象temp,路由地址是“temp”。注意!后面的static和templates是对应的html和css文件地址,需要进行设置,也可以自定义。
【2】bp.cpp
BP::BP()
{
CROW_BP_ROUTE(temp, "/xyz") ([] //该路径下的路由
{
return "asd";
});
CROW_BP_ROUTE(temp, "/") ([] //该路径下的路由
{
return "THIS IS BLUEPRINT temp";
});
CROW_BP_ROUTE(temp, "/ccc")
([]() {
auto page = crow::mustache::load_text("index.html");
return page;
});
}
BP::~BP()
{
}
注意,需要使用CROW_BP_ROUTE进行定义BP路由!在主程序中只要用CROW_ROUTE定义路由。
此时,bp对象中,有路由
(1)/xyz 返回“asd”
(2)/ 根路由,显示 “this is blueprint temp”
(3)/ccc 显示index.html文件
【3】main.cpp
BP bp;
app.register_blueprint(bp.temp);
实例化对象bp,这个bp具有一个定义好的temp,路由地址是/temp。此时,运行主程序,就可以进行访问。