首页 > 解决方案 > 应用程序在 127.0.0.1 上运行良好,但从其他设备访问时无法正常运行

问题描述

我设法使用 nodejs 发布了我的应用程序,并且可以从网络中的设备访问它(请注意,它只是一个本地应用程序)。这是一个用于控制连接到我的网络的其他硬件的应用程序。

我现在遇到的问题是,当我从托管它的本地 PC 从 127.0.0.1:8081 打开它时,该应用程序运行正常,但是如果我尝试从另一台设备(甚至从托管 PC 本身)通过使用托管 PC 的 IP 192.168.zz:8081,javascript 文件不起作用,这就是我的意思。

我有一个 config.js 文件,其中包含我的应用程序需要运行的配置数据,例如我正在控制的设备的 IP。

var config = {
    URL: '192.168.0.2',
}

然后我有一个包含 SetData 和 GetData 的 Model.js 文件,它们都依赖于 config.URL 来执行它们的 AJAX 请求,但是 config.URL 保持为空,它的硬编码仍然是空的!

当我运行应用程序并在控制台中执行 config.URL 时,我得到 null,即使我在控制台中手动设置 config.URL = '192.168.0.2',然后尝试调用 Model.SetData .....或 Model.GetData ......他们仍然没有看到它,他们仍在尝试向http://null/发送请求......

这是我的节点代码:

const express = require("express");
const app = express();
const port = 8081

app.use(express.static('public'))
app.use('/css', express.static(__dirname + '/public/css'));
app.use('/js', express.static(__dirname + '/public/js'));

app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`));

我尝试过使用和不使用 app.use(/css 和 /js 代码行,没有变化

这是我的 JS 是如何添加到我的 html 中的

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Robot Stuff</title>
  <script type="text/javascript" src="./js/jquery-3.5.0.js"></script>
  <script type="text/javascript" src="./assets/scripts/main.js"></script>
  <script type="text/javascript" src="./js/easy-numpad.js"></script>
  <script type="text/javascript" src="./js/jquery-modal.js"></script>
  <script type="text/javascript" src="./js/Model.js"></script>
  <script type="text/javascript" src="./js/UI.js"></script>
  <script type="text/javascript" src="./js/config.js"></script>
  <link href="./css/main.css" rel="stylesheet" type="text/css" >
  <link href="./css/easy-numpad.css" rel="stylesheet" type="text/css" >

同样,如果我从http://127.0.0.1:8081打开该应用程序,或者直接双击我的 index.html 文件,一切正常,但是当我使用 PC 的实际 IP远程访问它,然后它会中断。

我不想让它过于复杂,我只是想明确地使用节点来使应用程序在我的网络上可用,仅此而已。

标签: javascriptnode.js

解决方案


您需要在服务器脚本中允许跨源策略。这将使您也可以接受来自其他设备的请求标头。

npm i cors --save

或者您可以按照本指南 在 nodejs 中启用 CORS


推荐阅读