在ejs渲染中使用HTTP.request

时间:2018-06-13 07:32:38

标签: node.js http express ejs

Express中的示例我有一条链接到我的ejs中间件的路由。
代码1:

app.all("/sample", function(req,res,next){
    ejs.renderFile("./sample.ejs", {req,res,next,require,module:require("module")} {}, function(e, dt){
        res.send(dt.toString());
    });
});

第一个代码中的一切都很好。并在sample.ejs(第二个代码)我想请求Internet中的某些文本文件并返回HTML(并应使用HTTP模块)
代码2:

<%
    var http=require("http");
    var url=require("url");

    var opt = url.parse("http://website.com/thisfile.txt");
    /* it will return "Hello World!" btw */
    var dt = ""
    var hReq = http.request(opt, function(hRes){
        hRes.on("data", function(chunk){
            dt+=chunk.toString();
        });
    });
    hReq.end();
%>
<h2>Here is the data is <%= dt %></h2>

当我尝试浏览器时。它只是给我 代码3:

<h2>Here is the data is </h2>

我希望它给了我 代码4:

<h2>Here is the data is Hello World!</h2>

我怎么能得到那个?
我只想使用HTTP模块或网络套接字模块。我只想编辑代码2.代码1永远都是这样的。

1 个答案:

答案 0 :(得分:0)

虽然EJS可以运行完整的JavaScript,但您通常希望尽可能多地离开模板,并将更多逻辑放在主快速请求处理程序中。

由于渲染是在服务器端完成的,因此除了使其更易于阅读和测试之外,什么都不会改变。

您应该考虑将EJS模板中的HTTP请求移到app.all('/sample')处理程序中,然后将结果注入模板中。在这种情况下,这将是从HTTP请求收集的最终字符串。然后你会得到这样的东西。 (这是未经测试的代码)。

此外,虽然根本不需要,但我建议您查看request之类的内容,这样可以更轻松地处理HTTP请求!

var request = require('request');

app.all("/sample", function(req,res,next){

  // Make the HTTP request
  request('http://www.website.com/file.txt', function(err, response, body) {

    // Render the ejs template
    ejs.renderFile("./sample.ejs", {file: body}, function(e, dt) {
      // Send the compiled HTML as the response
      res.send(dt.toString());
    });
  });
});