Импортированная функция не определена при использовании в module.exports - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть js файл, подобный этому:

const {foo} = require('some-lib')

console.log(foo === undefined)  // for testing only

module.exports = {
    async bar() {
        let baz = foo();
    }
}

Это дает мне error TypeError: Cannot read property 'foo' of undefined, даже если console.log печатает false. Что здесь происходит?

(Фактический код примерно второй пример здесь , я пытаюсь использовать функцию buildQuery.)

EDIT: Для каждого запроса приведен минимальный воспроизводимый пример:

  1. Установите Strapi с настройкой quickstart (yarn create strapi-app my-project --quickstart)
  2. С запущенным Strapi, go для localhost:1337/admin, нажмите Content Type Builder на боковой панели и создайте минимальный article тип контента. Требуется только заголовок «статья», никаких других атрибутов.
  3. В Roles & Permissions, go до public и выберите все, затем сохраните.
  4. Теперь измените my-project/api/article/services/article.js на выглядит так:
'use strict';

const {buildQuery} = require('strapi-utils');

module.exports = {
  find() {buildQuery({model: 'article'})}
};

Это дает ошибку, описанную выше при вызове localhost:1337/article. Обратите внимание, что пример взят почти дословно из документации Strapi , а также обратите внимание, что console.log(buildQuery === undefined) непосредственно после импорта печатает false.

EDIT2:

Кажется, что это на самом деле это ошибка в Strapi, я открыл вопрос об их репозитории GitHub: https://github.com/strapi/strapi/issues/5306

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

имейте в виду, что require () возвращает обещание,

const {foo} = require('some-lib')

module.exports = {
bar : async  ()=>{
let baz = foo();
return baz;
                }
            }

, если этот возвратный бар как модуль содержит foo

0 голосов
/ 24 февраля 2020

Попробуйте:

const { foo } = require("some-lib");

console.log(foo === undefined); // for testing only

exports.foo = async () => {
  let baz = foo();
  return baz;
  //or just return foo();
};
...