为什么在本地ejs文件中传递给locals对象的变量变得未定义?

问题描述 投票:0回答:1

我是Node and Express的新手。我使用DOG API来获取包含所有品种的狗的对象,然后使用ejs渲染它们。下面是我的代码:

const express = require('express');
const path = require('path');
const port = 8000;

const app = express();

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.get('/', function (req, res) {
    var request = require('request');
    var obj;
    request('https://dog.ceo/api/breeds/list/all', function (error, response, body) {
        if (!error && response.statusCode == 200) {
            obj = JSON.parse(body);
            obj = obj.message;
            console.log("hello ", obj);
        }
    });
    res.render('index', { title: 'Hey', dogBreeds: obj });
});

app.listen(port, (err) => {
    if(err){
        console.log("ERROS: ",err);
    }
    console.log("Express server is runnig on port: ",port);
});

我有包含index.ejs文件的views文件夹以下是我的index.ejs文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>
        <%= title  %>
    </title>
</head>
<body>
   <h1>How r u?</h1>
    <p>
        <%= dogBreeds["waterdog"] %>
    </p>
</body>
</html>

当我在浏览器中输入:http://localhost:8000/并运行服务器时。控制台上的输出为:hello之后是完整对象的提取

但是在ejs文件中,当我尝试获取dogBreeds对象的属性时,它说:无法读取未定义的属性'属性名称']为什么会这样?还是我在某个地方出错?预先感谢您提供的任何帮助。

我是Node and Express的新手。我使用DOG API来获取包含所有品种的狗的对象,然后使用ejs渲染它们。下面是我的代码:const express = require('express'); const path = ...

node.js express ejs
1个回答
1
投票

[当您执行诸如发送请求之类的异步操作时,它们需要花费一些时间来解决(即使服务器非常迅速地给出响应,但回调函数不会立即执行)。在您的获取路线中,您正在发送请求并尝试立即呈现ejs文件。您应该等待响应。

© www.soinside.com 2019 - 2024. All rights reserved.