首页 > 解决方案 > Node.js,快递,我如何为我的网站呈现多个页面?

问题描述

我有一个 100 页的网站,目前由 PHP Apache 提供服务。我想将此网站转换为 Node/Express。但这是否意味着我必须分别渲染每个页面,为每个页面编写此代码 100 次?

app.get('/about', (req, res) => res.render('about'))

Thunder建议了优秀的代码(见下文),但是当我进行更改时,所有页面现在都可以呈现,但我必须将文件扩展名添加到浏览器地址以使页面显示。感谢您的任何建议。

标签: javascriptnode.jsexpressserver-side-rendering

解决方案


(我不是一个很好的解释者,但这里有......)

是的,您可以使用一个函数渲染多个 HTML 文件!

您可以使用:<parameter name here>将文件名转换为参数,然后您可以使用req.params.<parameter name here>(又名路由)从函数中调用该参数。在此处了解更多信息:https ://expressjs.com/en/guide/routing.html#route-parameters

因为您说您使用的是 PHP Apache,所以我将尝试为您提供个性化的解决方案。

假设您的文件目录如下所示:

文件目录

您可以在 index.js 中使用此代码:

const express = require('express');
const app = express();
const fs = require("fs")
const engines = require('consolidate');
const mustache = require("mustache");

app.set('views', __dirname + "/public_html");
app.engine('html', engines.mustache);
app.set('view engine', 'html');

function checkfile(file) {
    return fs.existsSync("public_html/" + file)
}

app.get('/:filename', (req, res) => {
    try {
        let filestring = req.params.filename.toString()
        if (checkfile(filestring)) {
            res.render(filestring)
        }
        else {
            res.render("404.html")
        }
    } catch {
        res.render("500.html")
    }
});

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

app.listen(8080, () => {
    console.log('server started');
});

public_html假设没有子目录(这会更复杂),它将呈现目录中的所有文件。

示例:https ://express-multiplefile-test.williamvongphan.repl.co


推荐阅读