如何从外部请求使本地服务器可用?

时间:2019-02-06 00:38:09

标签: javascript node.js localhost portforwarding

我正在本地主机上的端口3434上运行一个简单的nodejs服务器

const cors = require('cors');
const app = require('express')();
const bodyParser = require('body-parser')

app.use(bodyParser.json())
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(cors());

    app.get('/ping/:anystring', (req, res) => {
            console.log(req.params['anystring']);
            res.send({
                anystring: req.params['anystring']
            })
        });

    app.listen(3434);

,我想从我的网站执行一些ajax调用。 我试图像这样配置路由器端口转发:

- name service: mylocalserver   
- porta ragnge: 3434    
- local ip: 192.168.1.19
- local port: 3434
- protocol: BOTH

但是当我这样做

fetch(publicIP:3434/ping/hello).then(res => {
  console.log(res);
})

我收到错误404

有人可以帮我说我在做什么错吗?

2 个答案:

答案 0 :(得分:1)

您可以使用local tunnel 无需更改代码即可将localhost上的端口映射到Web URL

答案 1 :(得分:0)

除非创建隧道,否则您将无法访问LAN之外的本地主机服务器。我使用ngrok

ngrok有一个npm package,但是我无法正常工作,因此只要需要测试API时,我就从终端手动启动服务器。

还需要http

将此添加到您的app.js:

const http = require('http');

const newPort = //your port here (needs to be a different port than the port your app is currently using)

const server = http.createServer(function(req, res) {

  console.log(req); //code to handle requests to newPort
  res.end('Hello World);
});

app.listen(newPort, function() {
    console.log(`ngrok listening on ${newPort}`);
});

现在在终端中,安装ngrok后,使用此ngrok http newPort,其中newPort =您的端口

您可以通过转到localhost:4040查看发送到服务器的请求(这可能会因系统而异)

要将请求发送到您的本地主机,请执行以下操作:

- name service: mylocalserver //not sure
- porta ragnge: ???
- local ip: //ngrok gives you a url in terminal when you start the server (I'm not sure if you can reference an IP)
- local port: newPort
- protocol: http //(ngrok gives you a different url for http and https)