【发布时间】:2019-02-06 16:09:05
【问题描述】:
我正在尝试在 Windows Server 2012 上使用两个 Node.js express 服务器,每个服务器都有不同的 FQDN (example1.b.br | exemple2.b.br)。 应用程序是两个 Watson Chatbots,因此它们都需要使用 route /conversation 与 IBM 进行通信。
一个聊天机器人使用 443 端口,另一个使用 8443。
问题是:它们每个都在不同的目录中,并且有自己的名为“public”的子目录,但是当我执行两台服务器时,使用端口 8443 的服务器使用端口 443 服务器的“public”子目录。
-
聊天机器人
- 证书
-
聊天机器人1
node_modules
公开
- CSS
- 脚本
- 聊天机器人2
- node_modules
- 公开
- CSS
- 脚本
Chatbot1 app.js:
const AssistantV1 = require('watson-developer-cloud/assistant/v1');
const express = require('express');
const bodyParser = require('body-parser');
const http = require('http');
const https = require('https');
var fs = require('fs');
var httpApp = express();
var workspace;
var options = {
key: fs.readFileSync('certificates/key.pem'),
cert: fs.readFileSync('certificates/server.crt')
};
const app = express();
app.use(bodyParser.json());
app.use(express.static('./public'));
const port = 80;
const httpsPort = 8443;
httpApp.set('port', process.env.PORT || 80);
const assistant = new AssistantV1({
username: 'XXXXX',
password: 'XXXXX',
url: 'https://gateway.watsonplatform.net/assistant/api/',
version: '2018-02-16'
});
workspace = 'XXXXXXX';
app.post('/conversation/', (req, res) => {
const { text, context = {} } = req.body;
const params = {
input: { text },
workspace_id: workspace,
context,
};
assistant.message(params, (err, response) => {
if (err) res.status(500).json(err);
res.json(response);
});
});
try{
//var httpServer = http.createServer(httpApp, app).listen(port);
var httpsServer = https.createServer(options, app).listen(httpsPort);
//httpServer.listen(port, () => console.log(`Running on port ${port}`));
httpsServer.listen(httpsPort, 'exemple1.b.br', () => console.log(`HTTPS Running on port ${httpsPort}`));
console.log(`---------------------------------`);
console.log(`-----------ROBO INICIADO---------`);
console.log(`---------------------------------`);
}catch(err){
console.log(`*********************************`);
console.log(`*****Falha ao iniciar o Robo*****`);
console.log(`*********************************`);
console.log(err);
} */
Chatbot2 app.js:
const AssistantV1 = require('watson-developer-cloud/assistant/v1');
const express = require('express');
const bodyParser = require('body-parser');
const http = require('http');
const https = require('https');
var fs = require('fs');
var httpApp = express();
var workspace;
var options = {
key: fs.readFileSync('certificates/key.pem'),
cert: fs.readFileSync('certificates/server.crt')
};
const app = express();
app.use(bodyParser.json());
app.use(express.static('./public'));
const port = 80;
const httpsPort = 443;
httpApp.set('port', process.env.PORT || 80);
const assistant = new AssistantV1({
username: 'xxxxxxx',
password: 'xxxxxx',
url: 'https://gateway.watsonplatform.net/assistant/api/',
version: '2018-02-16'
});
workspace = 'XXXXXXX'
app.post('/conversation/', (req, res) => {
const { text, context = {} } = req.body;
const params = {
input: { text },
workspace_id: workspace,
context,
};
assistant.message(params, (err, response) => {
if (err) res.status(500).json(err);
res.json(response);
});
});
try{
var httpsServer = https.createServer(options, app).listen(httpsPort);
httpsServer.listen(httpsPort, 'exemple2.b.br', () => console.log(`HTTPS Running on port ${httpsPort}`));
console.log(`---------------------------------`);
console.log(`-----------ROBO INICIADO---------`);
console.log(`---------------------------------`);
}catch(err){
console.log(`*********************************`);
console.log(`*****Falha ao iniciar o Robo*****`);
console.log(`*********************************`);
}
如何“强制”服务器使用自己的子目录?
【问题讨论】:
-
app.use(express.static('./public'));告诉两个应用使用同一个目录(当它们从同一个 cwd 启动时... -
如果我将 Chatbot2 的子目录名称更改为 'public2',Chatbot1 也会使用子目录 'public2'。
-
你是如何启动这两个应用程序的?一个
app引用不会覆盖另一个吗? -
我用两个不同的 CMD 启动它们,作为不同的服务。抱歉,您是指 const 应用程序吗?如果是,他们不,我尝试使用不同的名称来搜索可能被覆盖的东西。我现在做了一个测试,如果我只使用端口 8443 运行聊天机器人,页面不会加载。 (但服务器一直在运行)
标签: javascript node.js express cors watson-conversation