【问题标题】:SailsJS - SQL queries and Data Access ObjectsSailsJS - SQL 查询和数据访问对象
【发布时间】:2015-06-01 21:08:35
【问题描述】:

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

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

    User.query(查询,函数(错误,结果){ 如果(错误) 返回下一个(错误); // res.json({ 数据: 步数 }); }); 但是我应该在哪里/如何放置 SQL 查询的参数? 在Java中,我曾经做过类似的东西:

    Query q = new Query("select * from User where id = :id"); q.setParameter("id", some-value);

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

提前谢谢你。

最好的问候, 马克西姆

【问题讨论】:

    标签: node.js


    【解决方案1】:

    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完全不同。我花了很多时间来解决这个问题,但是一旦我对这个想法感到满意,我就会立即开始喜欢它。

    让我知道这是否清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      相关资源
      最近更新 更多