我刚刚开始学习NodeJS / SailsJS并且几乎没有问题。 请注意,我有很强的Java背景(这会影响我的思维方式和架构)。
如何防止SailsJS中的SQL注入? 基本上,我有:
User.query(query,function(err,result){ 如果(错) 返回下一个(错误); // res.json({data:stepsCount}); }); 但是我应该在哪里/如何为SQL查询添加参数? 在Java中,我曾经做过类似的事情:
查询q =新查询("从用户中选择*,其中id =:id"); q.setParameter(" id",some-value);
数据访问对象怎么样? 在Controller中使用SQL查询我感到很不舒服。 你有什么最佳实践吗?也许一些示例项目? 到目前为止我找到的所有示例项目都不使用一些复杂的SQL查询。 它们更像是在Domain类中使用一些预定义的methonds(如User.create,User.find)等的学校项目。
提前谢谢。
最诚挚的问候, 马克西姆
答案 0 :(得分:0)
Sailsjs使用用javascript编写的DAO库(当然)。它被称为waterlinejs文档是here
基本上,这意味着,如果您想要找到具有特定ID的用户,您只需要
User.findOne({id:xxx}).then(function(data){
res.json(data);
})
这就像使用sailsjs的主要优点一样,因为waterlinejs可以有不同的适配器,但所有这些适配器都可以构建User模型,并像这样访问它们。因此,如果你使用sails-mysql-adapter,那么它将创建一个用户表,id,name ......等作为列,如果你使用内存适配器,它将被存储在内存中。
它确实提供了User.query('select .....',callback),以防万一你想要的DAO方法无法实现。但是因为它是最后的手段,对于查询构建,sailsjs没有本机支持,你当然可以使用像sprintf之类的包来构建sql。
由于你是一名java程序员,(就像我一样),作为旁注,我希望你能记住waterlinejs提供的这些findOne()方法是异步的,并且也是promise方式。它们与java完全不同。我花了很多时间环顾这个,但是一旦我对这个想法感到满意,我就立刻开始喜欢它。
请告诉我这是否清楚。