Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript nginx服务器和node.js运行故障_Javascript_Node.js_Nginx - Fatal编程技术网

Javascript nginx服务器和node.js运行故障

Javascript nginx服务器和node.js运行故障,javascript,node.js,nginx,Javascript,Node.js,Nginx,我已经在本地机器上安装了nginx服务器和node.js。我有以下node.js服务器: //app.js var fs = require("fs"); var express = require("express"); var app = express(); //app.use(express.static(__dirname + "/public")); app.get("/", function(request, response){ var content = fs.re

我已经在本地机器上安装了nginx服务器和node.js。我有以下node.js服务器:

//app.js
var fs = require("fs");
var express = require("express");
var app = express();

//app.use(express.static(__dirname + "/public"));

app.get("/", function(request, response){
    var content = fs.readFileSync("index.html");
    content = content.toString("utf8").replace("{{TEXT}}", "Home");
    response.setHeader("Content-Type", "text/html");
    response.send(content);
});

app.get("/hello/:text", function(request, response) {
var content = fs.readFileSync("index.html");
    content = content.toString("utf8").replace("{{TEXT}}", request.params.text);
    response.setHeader("Content-Type", "text/html");
    response.send(content);
}); 

app.listen(1337, "127.0.0.1");
如果我运行nginx服务器,localhost我会得到HTML页面,但是“{TEXT}}”不会被替换。如果我运行localhost/hello/hi,我会得到以下消息:500 Internal server Error

因此,在我的文件夹中有app.js文件和另一个名为public的文件夹,在public中有一个index.html文件

我做错了什么

另外,这里是我的nginx配置:

upstream app_nodejs {
server 127.0.0.1:1337;
}

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /usr/share/nginx/html;
index index.html index.htm;

server_name localhost;

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ /index.html;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;

    proxy_pass http://app_nodejs;
    proxy_redirect off;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

location /doc/ {
    alias /usr/share/doc/;
    autoindex on;
    allow 127.0.0.1;
    allow ::1;
    deny all;
}
}

Nginx在上正常运行,但node可能不是。在大多数情况下,不能在同一端口上运行两台服务器,这似乎是导致问题的原因。 当文件不是静态文件时,找出哪个端口节点正在运行,并将nginx管道连接到它。

代表OP发布

解决了的! 在nginx配置中,我为自定义路由添加了一个位置:

location /hello/ {
    location ~* {

proxy_pass http://app_nodejs;

    }
}
另外,对于其他未定义的路由,我在app.js中捕捉到它们:

app.get('*', function(req, res){
   res.send('Not found! Send the 404.html', 404);
});

我不认为node不能正常工作。经过更改,node.js代码在“/”上运行。如果我在localhost:1337上尝试,一切都很好。我想,nginx和node之间的连接是个问题。另外,nginx在80上,node在1337上。谢谢,您的答案是“受启发”更新:现在,如果我在本地主机上运行它,我会更改文本。但是如果我在localhost/hello/hi上运行,我会得到:无法得到/index.html。所有更改都已更新。嗨,丹。我们更喜欢这里的答案,而不是作为问题的补充。如果您希望在将来为另一个问题提供解决方案,我们鼓励您在此处自我回答(即使您接受另一个答案)。我刚才帮你搬了。