首页 > 解决方案 > 托管 Node.js 机器人(express 和 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 在我的计算机上本地托管机器人,我希望能够在服务器上托管它,所以我不必担心它。我能怎么做 ?

标签: node.jsexpressciscobotkit

解决方案


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

为了让两个应用同时监听,我建议你重构你的代码并将你的机器人和你的应用包含到一个单一的快速服务器中,它将在 Heroku 的PORT环境变量定义的端口上监听。

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


推荐阅读