【问题标题】:How do I invoke a Sails.js controller function from a file in the project root?如何从项目根目录中的文件调用 Sails.js 控制器函数?
【发布时间】:2017-11-01 18:19:00
【问题描述】:

我正在构建一个在 Heroku 上运行的 Sails.js 应用程序。我需要使用Heroku Scheduler 每隔几个小时运行一次“CRON”作业。调度程序只允许我运行一个命令,因此我将其设置为每 1 小时运行一次 $ node sendEmails.js

问题是,sendEmails.js 不是核心 Sails.js 项目的一部分,我需要它来调用 ReportsController.js 文件中的函数。我该怎么做呢?我不想将控制器逻辑复制到 sendEmails.js,因为它对数据库和其他我无法复制的服务有很多依赖关系。对于上下文:

/**
 * ReportsController
 *
 * @description     Server-side logic for managing reports
 * @help            See http://sailsjs.org/#!/documentation/concepts/Controllers
 */

module.exports = {

    // I need to call this function from sendEmails.js which is in my project root
    generate: function(req, res) {
        // Logic for generating reports
    }
}

【问题讨论】:

    标签: node.js sails.js


    【解决方案1】:

    您可以通过多种方式做到这一点:

    1. (更好)创建一个服务,然后调用服务名称,如Myservice.myfunction 甚至sails.myservice.function。顾名思义,您的服务将可用于每个控制器,并可用于集中将在全球范围内使用的代码。看看:Sails Services。然后,您可以在控制器中调用您的服务,然后如果适合您,您的服务可以(或不能)执行选项 2。

    2. (不是很好)在控制器或服务中,手动为您的文件路径执行require。像这样let myfunctions = require('../folder/myfile.js') 然后调用像 ``myfunctions.myfunction(nargs). Don't forget to usemodule.exports = {...}` 这样的函数。

    【讨论】:

    • @paulgdm 在这种情况下我不能真正使用服务。我想要实现的是能够从命令行调用我的sails.js 应用程序中的某些功能,因为这是我可以在Heroku 中运行计划作业的唯一方法。如何从命令行访问 Sails 控制器功能?
    • @Nag 我明白你的意思......恐怕你需要编辑你的app.js 文件。在那里,当您调用风帆升降机时,您可以做任何事情。也许它可以解决你的问题。但请注意,这不是 Sails 的设计用途!!!之后就是一个MVC框架。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2018-10-07
    • 2010-09-06
    相关资源
    最近更新 更多