我使用sails.js构建了一个Web应用程序,我对该应用程序的设计几乎没有疑问:
总而言之,我在风帆中看到代码的排列方式与模型类似(每个模型都有模型,控制器和视图),但是如果我想按功能或组件或页面排列代码呢?
谢谢!
答案 0 :(得分:1)
基本上你应该为每个模型配备一个控制器(但如果你不需要特定的控制器而且它是空的,你就不需要创建它)。为每个模型设置一个控制器是一个很好的做法。
如果您在许多地方使用某些部分代码并且未与指定的模型连接,则应该服务(例如发送电子邮件,通知,日志记录,图像处理)。阅读DRY
控制器应尽可能简单。它应该包含模型和服务的调用以及使用渲染输出的回调。所有业务逻辑都应该在模型中。
我创建了一些额外的帮助'用于更复杂模型的模型,例如用户等,以使类更短。
总结一下。您的应用程序的核心是模型。它不仅负责数据库层,还负责应用程序的业务层。后来有控制器。它从Model获取数据并将其传递给Views,后者负责显示从Model获取的数据。
答案 1 :(得分:-1)
Sails适用于REST API,它与视图无关。
你只需要知道MVC是什么以及REST是什么......
在一个Controller中,您可以调用多个模型,或者可以在多个控制器中调用一个模型。
在一个页面中,您可以从两个不同的API获取数据,这些API可能来自不同的控制器,甚至可以是不同的服务器。 例如:
- 在页面中,您可以直接从ellasticsearchAPI(例如esAPI1)
获取数据- 您正在从sails API(sAPI1)获取数据。
- 您正在从其他风帆API(sAPI2)获取数据。
醇>
为了保持整洁,您应该尽量保持控制器的清洁。所以对于相同的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;
}
};