如何在Node.js中的地址端口之间切换

时间:2019-01-16 11:52:05

标签: javascript node.js express port

在Node.js应用程序中,我正在侦听localhost上的两个端口,如下所示:

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

function startServer(port, hostname, app) {

    app.get('/', (req, res) => {
      res.send(`Welcome on server ${hostname} on port ${port}`);
    });

    app.listen(port, hostname);
    console.log(`listening ${hostname} on port ${port}`);
};

function startServerRedirect(port, hostname, app) {

    app.get('/', (req, res) => {

      res.send(`running server on ${hostname} on port ${port}`);
      res.redirect('localhost:4000');
    });

    app.listen(port, hostname);
    console.log(`listening ${hostname} on port ${port}`);
};

var hostname = '127.0.0.1';
startServerRedirect(3000, hostname, app);
startServer(4000, hostname, app);

我在默认的80端口上运行第一台服务器时遇到问题,但这没关系。我希望能够在另一个服务器端口上发送用户并显示他/她的其他内容。对于我来说,这样做比app.route或其他任何方式都重要。

2 个答案:

答案 0 :(得分:0)

尝试

const port = process.env.PORT || 80 ;

答案 1 :(得分:0)

为使此设置正常工作,您需要更改几件事。

首先,您需要两个单独的快速应用,一个用于处理重定向,另一个用于接收重定向。即2个不同的端口。

const app1 = express()
const app2 = express()

然后,当然最后,您要将它们传递给您的辅助函数:

startServerRedirect(3000, hostname, app1);
startServer(4000, hostname, app2);

此外,在呼叫redirect时,请确保在本例中使用带有“ http://”的完整网址,http://localhost:4000

最后,您不想在res.send之前致电res.redirect。原因是res.send开始响应,但是res.redirect设置了HTTP标头。您设置的所有HTTP标头都需要首先完成。因此,由于这里只是参考性信息,如果您想检查应用程序的工作方式,可以使用console.log来代替:

app.get('/', (req, res) => {
  console.log(`running server redirect on ${hostname} on port ${port}`);
  res.redirect('http://localhost:4000');
});

这在startServerRedirect

就端口80而言,我认为您需要root访问权限才能在此处运行,但这是另一个问题...(nginx代理?)