Ngnix 不提供我的 ejs 视图模板,但他们在本地工作

问题描述 投票:0回答:1

我最近在 linode 上的 ubuntu LTS 22.04 上部署了我的节点和 express 网站。 我正在使用 Nginx 来提供我的文件。 我刚刚编辑了我的默认文件以在此处运行我的应用程序它的代码

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:8000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

这些是我所做的改变

->这是我的 index.js

app.set("views", path.join(__dirname, "views"));
app.use(passport.session());
app.set("view engine", "ejs");
initializePassport(passport);

和我提供模板的路线

app.get("/login", (req, res) => {
res.render("login");
});

所有这些东西都在本地工作,甚至在生产中我的 api 也在工作但不服务于我的任何视图模板

Here is the image of my folder structure

我试着改变一些网址

app.set("views", path.join(__dirname, "views")); app.use(passport.session()); app.set("view engine", "ejs"); initializePassport(passport);

喜欢添加 / 也浏览一些博客

javascript node.js nginx ejs
1个回答
-1
投票

根据您提供的详细信息,问题似乎与视图文件夹的设置和 EJS 模板文件的位置有关。

当您使用 app.set("views", path.join( dirname, "views")) 命令时,Express 会在 views 文件夹中搜索您的 EJS 模板文件。

确保您使用的 EJS 模板文件具有适当的文件扩展名,并存储在视图文件夹 (.ejs) 中。另外,确认 EJS 模板文件的位置是准确的。

如果您的 EJS 模板文件位于 views 文件夹的子目录中,您应该在路径中添加子目录的名称。例如,如果您的 EJS 模板文件位于 partials 子目录中,则该文件的路径将是 views/partials/login.ejs。

这是您如何更改应用程序的说明。

添加行 set("views", path.join( dirname, "views")) 添加 partials 子目录:

app.set("views", path.join(__dirname, "views", "partials"));

确保 EJS 模板引擎也已正确安装和设置。这可以通过确保您的 package.json 文件将 ejs 包列为依赖项并且您的索引需要它来检查。 const ejs = require("ejs");在 js 代码中。

如果上述解决方案不起作用,您可能希望查看 Express 或 Nginx 日志以查找任何可能提供有关该问题的更多信息的错误消息。

希望有帮助!!!

更新

根据更新,问题可能与您的 Nginx 设置中的服务器名称有关。如果您仅使用您的 IP 地址访问您的网站,Nginx 可能无法确定服务器名称,因此无法将请求定向到您的 Node.js 应用程序。

您可以尝试在您的 Nginx 设置中更改服务器名称以指向您服务器的 IP 地址来解决这个问题。这是一个例子:

server {
    listen 80;
    server_name your_server_ip_address;

    location / {
        proxy_pass http://127.0.0.1:8000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.