Sequelizeが怖くて使えない
Node.jsで利用できるSequelize » A multi-dialect Object-Relational-Mapper for Node.JSという(現時点で唯一の?)ORMがあります。使い方にはクセがありますが、色々いじっていれば1日ほどで使えるようになるぐらいの難しさだと思います。v1.5.0時点で対応しているデータベースはMySQL、PostgresSQL、SQLiteです。適当な遊びプロジェクトを作るような時に、SQLiteが使えるというのは大変ありがたいので、ここの所、Node.js、Express、Sequelizeの組み合わせでいろいろ遊んでいました。
さて本題ですが、Sequelizeについて現時点で問題だと思う部分がありますので、挙げておきます。
どこでエスケープ処理しているのかわからない
これが実際に使う時に一番怖いところです。公式マニュアルにも書いてありますが、例えばfindのwhereで文字列を指定するときはSQLインジェクション対策*1されないので、開発者がエスケープする必要があります。
// or Project.findAll({where: "name = 'A Project'"}).success(function(projects) { // the difference between this and the usage of hashes (objects) is, that string usage // is not sql injection safe. so make sure you know what you are doing! })Sequelize » A multi-dialect Object-Relational-Mapper for Node.JS
オブジェクトの場合は自動でエスケープされて、文字列での指定は自分でエスケープする、つまり、どこでエスケープするかを考える必要があるというのは、よろしくない状況だと思います。
また、プレースホルダのようなものも使えるようですが、これが、また分かりづらいです。
// search with string replacements Project.findAll({where: ["id > ?", 25]}).success(function(projects) { // projects will be an array of Projects having a greater id than 25 })Sequelize » A multi-dialect Object-Relational-Mapper for Node.JS
サンプルは、コレしかありません。
が良く分かりません。
他にも、saveする時にエスケープ処理がされているのかもドキュメントからは分かりません。
とにかくドキュメントとサンプルが欲しい
上記以外にも、
なども良く分かりません。
是非とも、ドキュメントとサンプルの拡充を図って頂きたいです。中の人よろしくお願い致します。
とはいえ
やっぱりNodeにはNoSQLの方が似合っている気がしました。