【问题标题】:Use embedded js in ejs template to load static text file在ejs模板中使用嵌入式js加载静态文本文件
【发布时间】:2018-06-20 14:28:16
【问题描述】:

我目前正在使用 ejs 视图模板开发 nodejs 应用程序。我正在尝试通过模板中的嵌入式 js 调用存储在文本文件中的大量文本。这是当前模板的代码

<!DOCTYPE html>
<html>
    <head>
        <link href="/assets/styles/index.css", rel="stylesheet", type="text/css">
    </head>
    <body>
        <% var name = 'A Tale of Two Star Crossed Idiots: Act ' + act%>
        <%include partial/header.ejs%>
        <p>
            //the following line is completely wrong
            <%= require('fs').readFileSync('.'+__dirname + '/assets/text/romeo and juliet/act' + act + '.txt') %>
        </p>
    </body>
</html>

这是我运行时出现的错误

require is not defined
at eval (eval at compile (D:\Web Projects\NodeJs Test\node_modules\ejs\lib\ejs.js:618:12), <anonymous>:30:7)
at returnedFn (D:\Web Projects\NodeJs Test\node_modules\ejs\lib\ejs.js:653:17)
at tryHandleCache (D:\Web Projects\NodeJs Test\node_modules\ejs\lib\ejs.js:251:36)
at View.exports.renderFile [as engine] (D:\Web Projects\NodeJs Test\node_modules\ejs\lib\ejs.js:482:10)
at View.render (D:\Web Projects\NodeJs Test\node_modules\express\lib\view.js:135:8)
at tryRender (D:\Web Projects\NodeJs Test\node_modules\express\lib\application.js:640:10)
at Function.render (D:\Web Projects\NodeJs Test\node_modules\express\lib\application.js:592:3)
at ServerResponse.render (D:\Web Projects\NodeJs Test\node_modules\express\lib\response.js:1008:7)
at D:\Web Projects\NodeJs Test\index.js:14:9
at Layer.handle [as handle_request] (D:\Web Projects\NodeJs Test\node_modules\express\lib\router\layer.js:95:5)

有人知道如何正确执行此操作吗? 谢谢。

【问题讨论】:

    标签: javascript html node.js ejs embedded-javascript


    【解决方案1】:

    不幸的是,在 ejs 中需要模块是不可能的。您也可以尝试在 express 部分中加载文件。

    //Node.JS Backend
    
    app.get("/foo",(req,res)=>{
      const act = req.query.act; //Act as Query Parameter in URL
      fs.readFile('.'+__dirname+'/assets/text/romeo and juliet/act'+act+'.txt',"utf8",(error,data)=>{
        //Add your error handling (if(error))
        res.render("file",{bar:data});
      });
    });

    <!DOCTYPE html>
    <html>
        <head>
            <link href="/assets/styles/index.css", rel="stylesheet", type="text/css">
        </head>
        <body>
            <% var name = 'A Tale of Two Star Crossed Idiots: Act ' + act%>
            <%include partial/header.ejs%>
            <p>
                //the following line is completely wrong
                <%- bar %>
            </p>
        </body>
    </html>

    否则您可以将 fs 嵌入为脚本并在文档完成时加载它,但我猜这种方法应该更有效。

    【讨论】:

      猜你喜欢
      • 2017-11-06
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 2020-10-02
      相关资源
      最近更新 更多