Я не могу вернуть правильный объект, который я хочу вернуть - PullRequest
0 голосов
/ 09 октября 2019

Я использую NodeJS, и некоторые JS обещают попытаться использовать CMS через определенное веб-приложение. Я пытаюсь получить некоторые данные из API CMS, и я в состоянии console.log () данные, и они прекрасно отображаются в консоли. Хотя когда я пытаюсь вернуть его, он говорит, что объект не определен. Я не уверен, что я делаю неправильно. Любая помощь будет принята с благодарностью!

module.exports = {

    services: async function(){

        fetch(
          'https://graphql.datocms.com/',
          {
            method: 'POST',
            headers: {
              'Content-Type': 'application/json',
              'Accept': 'application/json',
              'Authorization': `Bearer ${token}`,
            },
            body: JSON.stringify({
              query: `{
                            service {
                                serviceName
                                serviceImg {
                                    url
                                }
                            }
                        }`
            }),
          }
        )
        .then(res => res.json())
        .then((res) => {
          return res.data;
        })
        .catch((error) => {
          console.log(error);
        });
    },  
}

Как я уже сказал, когда я делаю "console.log (res.data)", вместо этого он говорит undefined.

const records = require('../public/records');

//root route
router.get('/', async (req, res) => {
    res.render("landing", {serviceRecord: records.services()});
    console.log(records.services());
});

Вотмоя часть маршрутизации кода

функция, возвращающая объект

Как я использую его в index.js

Небеспокойтесь, переменные токена только для чтения!

1 Ответ

0 голосов
/ 09 октября 2019

services необходимо return fetch. Fetch возвращает обещание, поэтому обработка обещания и ответа должна произойти на вашем маршруте до вызова render.

module.exports = {
    services: () => fetch( /* your fetch code */)
}

// Then in your routes...
router.get('/', async (req, res) => {
    const resp = await records.services()
    const serviceRecord = await resp.json()
    res.render("landing", { serviceRecord });
});

Кроме того, кто-то упомянул об использовании await внутри вашей сервисной функции, что также вполне выполнимо.

module.exports = {
    services: async () => {
        const response = await fetch( /* your fetch code */)
        return await response.json()
    }

}

// Then in your routes...
router.get('/', async (req, res) => {
    const serviceRecord = await records.services()
    res.render("landing", { serviceRecord });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...