我刚刚在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,并且希望能够将其托管在服务器上,因此我不必担心它。我该怎么办?
答案 0 :(得分:0)
您无法在Heroku应用程序上设置端口。 Heroku通过PORT
环境变量设置您应该使用的端口,并且您应该通过process.env.PORT
使用它。一般来说,已部署的应用程序不应在诸如8080的开发端口上运行-例如,如果它是HTTP服务器,则必须在端口80上侦听。
为了让两个应用程序同时侦听,建议您重构代码,并将您的机器人和应用程序都包含在单个Express服务器中,该服务器将侦听Heroku的PORT
环境变量定义的端口
关于对文件系统的访问,可以使用它,但是在安全方面有很高的限制,因此可能在您的计算机上运行的代码很可能在服务器上损坏。一般来说,除了对已部署文件的只读操作外,直接在Heroku中访问文件系统是个坏主意。部分原因是因为文件系统为ephemeral,所以不要假设您编写的文件将永远存在。不过,通过使用Heroku提供的数据库或文件存储功能,可以解决大多数与使用文件系统有关的问题。