【问题标题】:Express res.render renders the wrong fileExpress res.render 渲染错误的文件
【发布时间】:2020-05-08 00:25:59
【问题描述】:

我已经设置了一个服务器来使用 Handlebars 作为视图引擎。在主页上的 GET 请求上使用 res.render 可以正确呈现页面,但是使用 res.render 呈现主页以外的页面会呈现相同的页面。即使使用res.send 也会发送主把手页面,但保持表达式不变。

这是我的代码:

const express = require("express");
const subdomain = require("express-subdomain");
const handlebars = require("express-handlebars");
const path = require("path");
const bodyParser = require("body-parser");

const app = express();
const subdomain = express.Router();

app.set("views", path.join(__dirname, "/views/layouts"));
app.set("view engine", "handlebars");
app.engine("handlebars", handlebars({
    "layoutsDir": path.join(__dirname + "/views/layouts")
}));

subdomain.use(bodyParser.json());
subdomain.use(bodyParser.urlencoded({"extended": true}));

subdomain.get("/", (req, res) => {
    res.send("books/index.html");
});

subdomain.get("/books", (req, res) => {
    let data = {};

    res.render("books", data);
});

app.use(express.static("public"));
app.use(subdomain("subdomain", subdomain));

app.get("/index", async (req, res) => {
    let data = {};

    res.render("main", data);
});

server = app.listen(8080, () => {
    console.log("listening to requests on port " + 8080);
});

显然,我想生成一个页面,而不仅仅是我网站上的主页。我做错了什么?

【问题讨论】:

    标签: javascript node.js express handlebars.js express-handlebars


    【解决方案1】:

    看起来你做了两次同样的事情

    代替:

    app.set("views", path.join(__dirname, "/views/layouts"));
    app.set("view engine", "handlebars");
    app.engine("handlebars", handlebars({
        "layoutsDir": path.join(__dirname + "/views/layouts")
    }));
    

    也许

    // view engine setup
    app.set("views", path.join(__dirname, "/views/layouts"));
    app.set("view engine", "hbs");
    

    已编辑:

    检查编辑,“hbs”而不是“handlebars”。我的 package.json 依赖项“hbs”中有这个:“~4.0.4”,或者查看 github.com/sahat/hackathon-starter 或完整的样板文件

    【讨论】:

    • 不幸的是没有工作...删除第一行或第三行会给我一个错误。编辑第三行说 app.engine("handlebars", handlebars()); 不会返回错误,但 express 仍然会呈现错误的页面。
    • 检查编辑,“hbs”而不是“handlebars”。我的 package.json 依赖项中有这个 "hbs": "~4.0.4", 或检查 github.com/sahat/hackathon-starter 或完整的样板
    • 将渲染引擎切换到“hbs”有效,谢谢 :) 如果其他人偶然发现并进行切换,我显然必须安装 hbs 包,需要它,然后遵循不同的格式对于我在 hbs 的 npm 页面上找到的帮助函数。
    • 太棒了!我编辑了答案,请将其标记为帮助其他用户的解决方案。
    猜你喜欢
    • 2019-02-05
    • 2021-11-13
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2019-02-14
    • 1970-01-01
    相关资源
    最近更新 更多