如何使用ExpressJS(在主视图/根视图上)呈现带有参数的HTML视图

How to render HTML view with parameters using ExpressJS (on the home/root view)?

本文关键字:视图 参数 HTML ExpressJS 主视图 何使用      更新时间:2023-09-26

当用户转到我的应用程序主页时,我想发送一个参数并呈现一个html文件。

以下是我迄今为止所做的:

app.set('view engine', 'ejs');
app.use(express.static(__dirname + '/public'));
app.get('/', function (req, res) {
    console.log('Hi !'); // never displayed
    res.render('index', { foobar: 'foobar'});
});

HTML已正确呈现(可能是由于express.static),但似乎从未调用过app.get('/'),因此我无法返回变量。

如何使用静态HTML页面public/index.HTML从对"/"的调用中返回变量?

我的最终目标是能够在JS中使用foobar,而无需对服务器进行任何额外的调用。你能帮我实现这一点吗?

如果您的public/目录中有一个名为index.html的文件,如果请求了url /express.static()将返回该文件,因此您的路由处理程序将永远不会通过该请求。

通常,模板存储在与静态(公共)资源不同的目录中。默认情况下,Express将在./views目录中查找模板(除非您另有说明),因此如果您将index.html移动到那里,它将由EJS渲染(但请参见下文),您可以在其中使用参数。

由于EJS默认情况下会查找以.ejs扩展名结尾的文件,如果您想继续使用.html,则需要按如下方式设置Express:

var ejs = require('ejs');
...
app.set('view engine', 'html');
app.engine('html', ejs.renderFile);

这个命令告诉Express在./views目录中查找扩展名为.html的文件,并使用EJS呈现这些文件。

var express = require('express');
var router = express.Router();
router.get('/index',function(req,res){
    res.sendFile(path.resolve('./public/index.html'));
});

module.exports = router;