SailsJS - SQL查询和数据访问对象

时间:2015-06-01 21:08:36

标签: node.js

我刚刚开始学习NodeJS / SailsJS并且几乎没有问题。 请注意,我有很强的Java背景(这会影响我的思维方式和架构)。

  1. 如何防止SailsJS中的SQL注入? 基本上,我有:

    User.query(query,function(err,result){   如果(错)     返回下一个(错误);   //   res.json({data:stepsCount}); }); 但是我应该在哪里/如何为SQL查询添加参数? 在Java中,我曾经做过类似的事情:

    查询q =新查询("从用户中选择*,其中id =:id"); q.setParameter(" id",some-value);

  2. 数据访问对象怎么样? 在Controller中使用SQL查询我感到很不舒服。 你有什么最佳实践吗?也许一些示例项目? 到目前为止我找到的所有示例项目都不使用一些复杂的SQL查询。 它们更像是在Domain类中使用一些预定义的methonds(如User.create,User.find)等的学校项目。

  3. 提前谢谢。

    最诚挚的问候, 马克西姆

1 个答案:

答案 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完全不同。我花了很多时间环顾这个,但是一旦我对这个想法感到满意,我就立刻开始喜欢它。

请告诉我这是否清楚。