Sails基础之Helpers(Service层)

本文介绍了Sails v1.0中Helper的作用,作为替代旧版Service的公共方法集合,用于提高代码复用和可维护性。通过Helper实例`get-absolute-path.js`展示如何实现一个获取绝对路径的方法,并在`TestController.js`中使用。同时,文章讨论了如何在Sails中进行同步调用的配置。
摘要由CSDN通过智能技术生成

在Sails v0.12版本中曾经提供了Service层,Service在传统的MVC结构中处于Controller与Dao之间,具体实现一个业务逻辑服务,但在v0.12中的Service并不能很好实现对Service层的定位,更像是一个公共方法的集合,在v1.0中已经淡化了Service的概念,取而代之的是提出了Helper做为一个提供公共方法的集中场所,用来将重复的代码抽象到单独的文件中,从而在其他各种地方进行复用,当代码增多时,它能提升可维护性。

一个Helper例子

sails generate helper get-absolute-path
sails generate controller test

get-absolute-path.js:

const path = require('path');

module.exports = {


  friendlyName: 'Get absolute path',

  description: 'Get absolute path',



  inputs: {
    resolvePath: {
      type: 'string',
      description: 'The resolve path',
      required: true
    }
  },

  exits: {

    success: {
      outputFriendlyName: 'Absolute path',
      outputType: 'ref'
    },

  },

  fn: async function (inputs, exits) {

    let absolutePath = path.resolve(sails.config.appPath, inputs.resolvePath);
    return exits.success(absolutePath);
  }

};

Helper getAbsolutePath实现了一个通过相对路径获取绝对路径的方法。
TestController.js编写测试Controller:

module.exports = {
  
    testGetAbsolutePath: async function(req, res){
        let resolvePath = req.param('path');
        let absolutePath = await sails.helpers.getAbsolutePath.with({
            resolvePath: resolvePath
        });
        return res.json({
            absolutePath: absolutePath
        });
    }
};

config/routers.js配置路由:

'get /api/test/path/:path': {
  controller: 'TestController',
  action: 'testGetAbsolutePath',
  skipAssets: true
},

一个Rest的路由配置,测试url:http://127.0.0.1:1337/api/test/path/image

Synchronous同步

Sails v1.0默认提供的是异步调用,可以通过配置和修改代码将调用调整为同步方式:

  1. 将代码中的await和async去掉
  2. 配置属性sync: true
    参考以下修改:
    get-absolute-path.js:
fn: function (inputs, exits) {

    let absolutePath = path.resolve(sails.config.appPath, inputs.resolvePath);
    return exits.success(absolutePath);
  },
sync: true

TestController.js:

testGetAbsolutePath: function(req, res){
        let resolvePath = req.param('path');
        let absolutePath = sails.helpers.getAbsolutePath.with({
            resolvePath: resolvePath
        });
        return res.json({
            absolutePath: absolutePath
        });
    },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值