Drogon
C++のウェブフレームワーク Drogon を使ってみたので感想などなど
フレームワークのリンクは以下に貼っておきます。
これ使って(バックエンドのみ)作ったサイトは以下になります。
所感
普通に使いやすかった。
バックエンドとして使用するには十分。(基本的にバックエンドとしてしか使ってないので)
ほかのライブラリーの導入もしやすかった。CMakeファイルを理解する勉強になった。
ソースコードの内部でデータベースのテーブル定義とかはできない。(外部モジュールを利用すれば可能かも)
テーブルは独自にSQLクライアントを使って作っておく必要あり。
対応データベースはPostgreSQL、MySQL、Sqlite3
macOSだとMySQLではmariaDBを使うことになる。
遭遇したエラー1
https://drogon.docsforge.com/master/database-general/database-dbclient/#execsqlasync
にあるような感じで
auto f = clientPtr->execSqlAsyncFuture(R"(insert into questions (user_id,title,text) values (2, "'", "'"))","default");
テーブルに値を追加するとき、
(titleとtextはchar型のカラム)シングルクォーテーションを追加するとtitleのカラムだけ'default'という値に変わってしまう。textはちゃんとシングルクォーテーションが挿入される。
MySQLクライアントで以下のような挿入をすると正しく実行されるのにも関わらず
>> insert into questions (user_id,title,text) values (2, "'", "'");
原因
例に従って末尾に書いていた"default"という文字。
auto f = clientPtr->execSqlAsyncFuture(R"(insert into questions (user_id,title,text) values (2, "'", "'"))","default");
execSqlAsyncFutureの内部で問題が起きている。
解決方法
末尾の"defaul"を削除する
auto f = clientPtr->execSqlAsyncFuture(R"(insert into questions (user_id,title,text) values (2, "'", "'"))");
遭遇したエラー2
前述したようなSQL文では、ダブルクォーテーションを挿入するとエラーになる。
原因
MySQLのシーケンス文字を追加していないから
解決方法
正規表現を使って、シーケンス文字を挿入するべき文字にシーケンス文字を添付する
詳細はほかの記事にまた書く。