簡體   English   中英

使用兩個快速應用程序時出現CORS問題

[英]CORS Problem when using two express application

我正在嘗試在Windows Server 2012上使用兩台Node.js Express服務器,每台服務器具有不同的FQDN(example1.b.br | exemple2.b.br)。 這些應用程序是兩個Watson Chatbot,因此它們都需要使用路由/會話與IBM進行通信。

一個聊天機器人使用端口443,另一個聊天機器人使用端口8443。

問題是:每個服務器都位於不同的目錄中,並且有自己的子目錄“ public”,但是當我執行兩個服務器時,使用端口8443的服務器使用端口443服務器的“ public”子目錄。

  • 聊天機器人

    • 證書
    • Chatbot1

      • node_modules

      • 上市

      • CSS
      • 腳本
    • Chatbot2
      • 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(`*********************************`);
}

如何“強制”服務器使用其自己的子目錄?

“問題解決了。

實際上,這是我缺乏有關FQDN實際工作方式的研究,而且還應歸咎於防病毒。

example2.b.br的網址中不需要“:443”,因為該端口是HTTPS的默認端口。 但是當我使用example1.b.br時,它在( https://example1.b.br:8443 )后需要“:8443”。

至少這個簡單的錯誤使我了解了這一細節。

之后,我發現服務器防病毒軟件阻止了某些文件。 在端口上創建僅通過Intranet進行通信的異常后,問題得以解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM