使用 express.js 在 node.js 中提供 html 的最佳实践是啥?
Posted
技术标签:
【中文标题】使用 express.js 在 node.js 中提供 html 的最佳实践是啥?【英文标题】:What is the best practice for serving html in node.js with express.js?使用 express.js 在 node.js 中提供 html 的最佳实践是什么? 【发布时间】:2013-05-11 17:10:06 【问题描述】:我目前正在我的 app.js/server.js 文件中提供我所有的 html,如下所示:
app.get('/', function(req, res)
res.render('index.html');
);
app.get('/about', function(req, res)
res.render('about.html');
);
app.get('/projects', function(req, res)
res.render('projects.html');
);
我想如果我有 15 个以上的 html 页面,这可能不是调用它们的最佳方式。有没有更好的方法可以从另一个文件或位置为它们提供服务,并使用导出或其他东西来仅调用 app.js 上的一个函数或某些东西。这可能是路由的用途,但也许我不太了解它。
(在同一文件中添加了更多代码)
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/public');
// used below code to render html files
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'ejs');
app.use(express.favicon("public/img/favicon.ico"));
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
【问题讨论】:
这更像是一个 express.js 问题而不是 node.js,添加标签和改写问题。 【参考方案1】:您可以使用static
中间件:
app.use("/", express.static(__dirname));
服务器示例:
var express = require('express');
var app = express();
app.use('/', express.static(__dirname + '/public'));
app.listen(3000, function() console.log('listening'));
这是文件结构:
.
├── public
│ ├── a.html
│ ├── b.html
│ └── c.html
└── server.js
文档:
http://expressjs.com/api.html#app.use http://www.senchalabs.org/connect/static.html http://expressjs.com/faq.html#multiple-statics【讨论】:
这会在所有其余页面上调用 get 还是我仍然必须使用 app.use("/about" ...) 等等?如果不是,那么它如何从这一行中知道获取其余页面? 如果你例如写app.use("/", express.static(__dirname + '/public'));
public
文件夹中的所有文件将是服务器。
另外,在上面添加了更多我已经拥有的可能相似的文件(因为我正在使用静态调用。
我试过了,但它只获取索引,其他所有内容都出现 404 错误,页面未加载。
尝试隔离为文件提供服务的部分,也许为此编写一个小型服务器,以便掌握它。【参考方案2】:
一个想法是使用一条包罗万象的路线作为最后一条路线,如下所示:
app.get('/:page', function(req, res)
res.sendfile(path.join(__dirname, 'public', 'pages', path.basename(req.params.page) + '.html'));
);
这需要您将 .html 文件放入 public/pages/about.html 等。
您可能希望切换静态文件路由器的顺序,以便静态文件也优先于路由,除非您希望该路由捕获公共文件夹中的内容,如下所示:
应用程序
app.set('view engine', 'ejs');
app.use(express.favicon("public/img/favicon.ico"));
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'public')));
app.use(app.router);
【讨论】:
以上是关于使用 express.js 在 node.js 中提供 html 的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Express.js 在 Node.js 中设置路由的最佳方式
node.js + express.js:使用 mongodb/mongoose 处理会话
我可以在 Node.js/Express 中动态导入 TypeScript 模块吗?
javascript 在Express.JS中的Node.JS中使用Fetch API