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永远都是这样的。
答案 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());
});
});
});