【问题标题】:SPA w/ Node.JS and Express and .ejsSPA w/ Node.JS 和 Express 和 .ejs
【发布时间】:2019-03-06 09:52:56
【问题描述】:

您将如何在单页应用上显示解析的数据。例如,我可以 console.log 从 API 生成的报价,但我不知道如何将它们发布到单个页面上。

索引.ejs:

<% include ./partials/header %> 
<div class=container>
    <h1>Free2BGeek</h1>
    <h3>This is your joke for the day!</h3>
    <hr>
    <p>
        "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse sit amet turpis ex. Vivamus aliquet ipsum tortor, at rhoncus ligula efficitur condimentum. Sed pretium arcu quis ex fringilla, et consectetur odio sodales."
    </p>
</div>
<% include ./partials/footer %> 

app.js

const express        = require("express"),
      app            = express(),
      request        = require("request"),
      bodyParser     = require("body-parser"),
      mongoose       = require("mongoose");

mongoose.connect("mongodb://localhost:27017/geek-jokes", { useNewUrlParser: true });
mongoose.set('useFindAndModify', false);
app.set("view engine", "ejs");
app.use(express.static("public"));
app.use(bodyParser.urlencoded({extended: true}));

app.get("/", function(req, res){
    res.render("index");
});

let options = {
    url: 'https://geek-jokes.sameerkumar.website/api',
    method: 'GET'
};
request(options, (err, response, body) => {
    if(!err && response.statusCode == 200)
        var parsedData = JSON.parse(body);
        console.log(parsedData);
});

app.get("*", function(req, res){
    res.send("Error - I'm sorry, the page you tried to get to either does not exist or has been removed.");
});
app.listen(process.env.PORT, process.env.IP, function(){
    console.log("Geeks are ready!");
});

我希望能够用笑话替换 Lorem Ipsum 文本。

我目前的结果如下:

Index Page

我试着把

<p>
   <%= options %>
</p>

但我只得到一个错误。我应该使用 POST 路由来替换 ext 吗?或者是否有另一种方法可以嵌入来自 api 的引用?

================================================ ==============================

感谢THEWOLFLawrence Cheroneapp.js 文件中的代码更新如下:

const express        = require("express"),
      app            = express(),
      request        = require("request"),
      bodyParser     = require("body-parser"),
      mongoose       = require("mongoose");

var url = process.env.DATABASEURL || "mongodb://localhost:27017/geek-jokes";
mongoose.connect(url);

mongoose.set('useFindAndModify', false);

app.set("view engine", "ejs");

app.use(express.static("public"));

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

app.get("/", function(req, res){
        let options = {
            url: 'https://geek-jokes.sameerkumar.website/api',
            method: 'GET'
    };

    request(options, (err, response, body) => {
        if(!err && response.statusCode == 200)
            var parsedData = JSON.parse(body);
            console.log(parsedData);
            res.render("index", {body: parsedData });
    });
});

app.get("*", function(req, res){
    res.send("Error - I'm sorry, the page you tried to get to either does not exist or has been removed.");
});

app.listen(process.env.PORT, process.env.IP, function(){
    console.log("Geeks are ready!");
});

【问题讨论】:

  • 您需要先调用api然后将结果传递给视图res.render("index", {joke: parsedData });(假设parsedData是笑话字符串)然后在视图中访问笑话,RTM:expressjs.com/en/guide/using-template-engines.html
  • 非常感谢。我在 HTM 中创建了 &lt;%= body %&gt;,将 let 和 request 放在 get 请求中,并在 request 函数中写了 res.render("index", {body: parsedData });。老实说,我第二次猜到自己......

标签: node.js express ejs


【解决方案1】:

您必须像这样将要发送的数据对象传递给前端

app.get("/", function(req, res){
    res.render("index",{data:'your data like this in here'}); // change like this and acess it in front end the way you have done it 
});

let options = {
    url: 'https://geek-jokes.sameerkumar.website/api',
    method: 'GET'
};
request(options, (err, response, body) => {
    if(!err && response.statusCode == 200)
        var parsedData = JSON.parse(body);
        console.log(parsedData);
});

【讨论】:

  • 如果您对这个答案感到满意,请将其投票为正确的答案
  • 也非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2019-11-25
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
相关资源
最近更新 更多