如何在sails.js中正确设计Web应用程序?

时间:2016-04-04 07:36:17

标签: mysql sails.js

我使用sails.js构建了一个Web应用程序,我对该应用程序的设计几乎没有疑问:

  1. 我应该为每个页面,组件或模型创建控制器吗?我在文档和一些教程中看到他们为每个模型创建控制器。这看起来不错,但如果我有一个复杂的页面/组件,并且我想创建具有多个模型(和数据)的视图,它对我没有帮助。
  2. 我应该在哪里放置组件或功能的业务逻辑部分?我读到了Serivce,但我不确定这是不是正确的地方。
  3. 总而言之,我在风帆中看到代码的排列方式与模型类似(每个模型都有模型,控制器和视图),但是如果我想按功能或组件或页面排列代码呢?

    谢谢!

2 个答案:

答案 0 :(得分:1)

基本上你应该为每个模型配备一个控制器(但如果你不需要特定的控制器而且它是空的,你就不需要创建它)。为每个模型设置一个控制器是一个很好的做法。

如果您在许多地方使用某些部分代码并且未与指定的模型连接,则应该服务(例如发送电子邮件,通知,日志记录,图像处理)。阅读DRY

控制器应尽可能简单。它应该包含模型和服务的调用以及使用渲染输出的回调。所有业务逻辑都应该在模型中。

我创建了一些额外的帮助'用于更复杂模型的模型,例如用户等,以使类更短。

总结一下。您的应用程序的核心是模型。它不仅负责数据库层,还负责应用程序的业务层。后来有控制器。它从Model获取数据并将其传递给Views,后者负责显示从Model获取的数据。

答案 1 :(得分:-1)

回答第一个

Sails适用于REST API,它与视图无关。

你只需要知道MVC是什么以及REST是什么......

在一个Controller中,您可以调用多个模型,或者可以在多个控制器中调用一个模型。

在一个页面中,您可以从两个不同的API获取数据,这些API可能来自不同的控制器,甚至可以是不同的服务器。 例如:

  
      
  1. 在页面中,您可以直接从ellasticsearchAPI(例如esAPI1)
  2. 获取数据   
  3. 您正在从sails API(sAPI1)获取数据。
  4.   
  5. 您正在从其他风帆API(sAPI2)获取数据。
  6.   

回答第二个

为了保持整洁,您应该尽量保持控制器的清洁。所以对于相同的sailsJS为您提供服务。在哪里可以编写将在多个控制器中使用的通用功能。

请参阅代码

这是控制器:

//TestController
module.exports = {
    action1:function(req,res){
        Model1.find().exec(function(err,data1){
            if(err)
                return res.negotiate(err);
            res.ok(data1);
        });
    },
    action2:function(req,res){
        Model2.find().exec(function(err,data1){
            if(err)
                return res.negotiate(err);
            res.ok(data2);
        });
    },
    action3:function(req,res){
        var hash=SomeService.getMeHashCode(req.query.text)
        res.ok({hashedData:hash});
    }
};

这就是服务。

//SomeService.js
module.exports = {
    getMeHashCode:function(strinToBeHashed){
        var hash=doSomeThingToHash(strinToBeHashed);
        return hash;
    }
};