托管一个Node.js机器人程序(express和botkit)

时间:2019-03-30 13:02:58

标签: node.js express cisco botkit

我刚刚在node.js中为Cisco Webex Teams应用程序制作了一个机器人。我的机器人使用“ express”和“ botkit”。 “ Express”需要侦听端口“ 3000”,而“ Botkit”则侦听端口“ 8080”。

我尝试了heroku.com,但它不接受两个预定义的端口,并且不能动态保存文件(fs.write)

var PUBLIC_URL = "http://a796e3b7.ngrok.io";
var port ='3000';
var ACCESS_TOKEN ='xxx';
var SECRET = "xxx";

var express = require('express');
var app = express();

var Botkit = require('botkit');
var controller = Botkit.webexbot({
    log: true,
    public_address: PUBLIC_URL,
    access_token: ACCESS_TOKEN,
    secret: SECRET,
    webhook_name: process.env.WEBHOOK_NAME || 'Email2Webex',
});

controller.setupWebserver(8080, function(err, webserver) {
    controller.createWebhookEndpoints(webserver, bot, function() {
        console.log("Webhooks set up!");
    });
});

app.post('/mailgun', upload.any(),function(req, res, next){

  res.end('ok');

});

app.listen(port);

当前,我使用ngrok在计算机上本地托管该bot,并且希望能够将其托管在服务器上,因此我不必担心它。我该怎么办?

1 个答案:

答案 0 :(得分:0)

您无法在Heroku应用程序上设置端口。 Heroku通过PORT环境变量设置您应该使用的端口,并且您应该通过process.env.PORT使用它。一般来说,已部署的应用程序不应在诸如8080的开发端口上运行-例如,如果它是HTTP服务器,则必须在端口80上侦听。

为了让两个应用程序同时侦听,建议您重构代码,并将您的机器人和应用程序都包含在单个Express服务器中,该服务器将侦听Heroku的PORT环境变量定义的端口

关于对文件系统的访问,可以使用它,但是在安全方面有很高的限制,因此可能在您的计算机上运行的代码很可能在服务器上损坏。一般来说,除了对已部署文件的只读操作外,直接在Heroku中访问文件系统是个坏主意。部分原因是因为文件系统为ephemeral,所以不要假设您编写的文件将永远存在。不过,通过使用Heroku提供的数据库或文件存储功能,可以解决大多数与使用文件系统有关的问题。