我有一个基本的 Nodejs 服务器,提供静态文件。在本地测试中效果非常好。
但是,我将其托管在谷歌云实例上。设置 nginx 服务器。访问页面工作正常。
问题是,从 google 托管服务器访问页面时,找不到 html 页面中包含的某些 js 文件。我检查了代码/文件,与本地测试使用的相同。
let express = require('express');
var app = express();
app.use(express.static('public'));
app.get('/',function(req,res){
res.sendFile(__dirname + '/main.html');
});
app.listen(8080);
console.log("listenning on 8080");
HTML 页面:
<head>
<script type="text/javascript" src="/web3-min.js"></script>
<script type="text/javascript" src="/etherjs.js"></script>
实例上的文件架构:http://prntscr.com/jmuebs
为什么要这样做以及如何解决这个问题?
编辑:NGINX配置文件(server_name是我的实异常(exception)部IP):
最佳答案
您的文件将在 http://you-ip-address/public/web3-min.js
在您的错误图像中,您正在像 http://you-ip-address/web3-min.js
一样访问它们。
因此,在您的 HTML 页面中更改 src="/public/web3-min.js"
编辑:
如果您希望 Nginx 处理静态文件的服务,您可以像下面这样配置您的 Nginx。
server {
listen 8081;
server_name example.com;
location / {
root /path/to/website/public;
index index.html;
try_files $uri $uri/ @express; # instead of 404, proxy back to express using a named location block;
# source: https://stackoverflow.com/a/15467555/8436941
}
location @express {
proxy_pass http://localhost:8080;
}
}
关于javascript - 本地和生产环境中 Node 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50542059/