javascript - Node.js,快递,我如何为我的网站呈现多个页面?
问题描述
我有一个 100 页的网站,目前由 PHP Apache 提供服务。我想将此网站转换为 Node/Express。但这是否意味着我必须分别渲染每个页面,为每个页面编写此代码 100 次?
app.get('/about', (req, res) => res.render('about'))
Thunder建议了优秀的代码(见下文),但是当我进行更改时,所有页面现在都可以呈现,但我必须将文件扩展名添加到浏览器地址以使页面显示。感谢您的任何建议。
解决方案
(我不是一个很好的解释者,但这里有......)
是的,您可以使用一个函数渲染多个 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
推荐阅读
- java - 从 int 转换为十六进制字符串以检查它是否包含单词
- c++ - Summing vector elements in a for loop, and reset the summing after certain number of vector elements
- tensorflow - TF2.x eager mode can not support ParameterServerStrategy now?
- reactjs - typescript es-lint error: react-hooks/exhaustive-deps
- reactjs - How to conditionally route to a component in react based on a variable in the route?
- postgresql - Postgresql Alter Table freezes DB (CPU is high-loaded by some Select)
- javascript - javascript子函数事件分配
- docker - Cannot create a SQL Server 2019 pod, but can create an SQL Server 2017 pod. Why can't I create an SQL Server 2019 pod?
- git - 未在 github 中显示的贡献和与每个提交无关的电子邮件 ID
- keycloak-gatekeeper - nginx入口反向代理背后的Keycloak Gatekeeper