【问题标题】:How to serve static files using both express and ejs and send the data?如何使用 express 和 ejs 提供静态文件并发送数据?
【发布时间】:2020-02-05 18:46:59
【问题描述】:

我正在尝试使用 express 提供文件并使用 ejs 将数据发送到 html 文件。问题是我只需要使用 express 来提供文件或使用 ejs 来发送数据,但由于某种原因我不能同时使用两者。我的道路是正确的,但可能我必须做一些不同的事情才能使两者都起作用。当我使用app.use(express.static('../dist')) 时,我的代码没有到达 app.get,但是当我评论该行时,它确实发送了数据。如果我能知道发生了什么,那就太好了。

我的代码如下:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');

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

app.use(express.static('../dist'));

app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
app.set('views', __dirname, '../dist');

app.listen(4000, function() { console.log('listening')});

let views;

jwt.authorize((err, response) => {
    google.analytics('v3').data.ga.get(
        {
            auth: jwt,
            ids: 'ga:' + view_id,
            'start-date': '30daysAgo',
            'end-date': 'today',
            metrics: 'ga:sessions, ga:pageviews'
        },
        (err, result) => {
            console.log();
            views = result;
            console.log(views.data.rows[0][0]);

            app.get('/', function(req, res){
                console.log('test');
                res.render('../dist/index.html',{sessions:views.data.rows[0][0], pageviews:views.data.rows[0][1]});
            });
        }
    );
});

【问题讨论】:

    标签: node.js express ejs


    【解决方案1】:

    如果两个路由匹配一个 URL,那么将使用最先定义的路由。

    / 命中静态路由,找到匹配项(带有index.html 文件)并提供它。

    路由匹配代码永远不会到达app.get('/'


    EJS 文件不是静态文件。不要将它们与您的静态文件混合在一起。

    如果你保存静态文件的目录中没有index.html,那么它不会在静态路由上匹配,所以路由匹配码会到达app.get('/'

    您可能应该将文件分开(分成statictemplates,而不是将它们集中在dist 中)并通过给它们提供.ejs 文件扩展名而不是.html 来明确哪些文件是EJS 模板.

    【讨论】:

    • 好的,我通过仅使用我的视图文件夹中的 ejs 文件(而不是使用 html)来修复它,我在其中启动我的节点服务器并使用 express 的其余文件(css、js 等) .在投票之前,我想知道是否可以将 html 文件与 express 组合并提供服务并使用 ejs?或者我应该只使用 ejs,因为在这种情况下我必须将变量从 nodejs 发送到我的前端?
    • 这就是 EJS 的重点! (虽然它不限于 HTML)。 (如果您没有在文件中使用 EJS,那么通过 EJS 引擎运行它效率低下,并且更难设置合理的缓存控制标头)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 2014-04-22
    相关资源
    最近更新 更多