2017-02-20 3 views
0

Я читал об модульном моем коде и решил экспортировать некоторые функции в отдельный файл и включить их в свою главную функцию после ее вызова.Использование экспорта в nodejs для возврата значения

У меня есть два файла: index.js и weather.js.

В моем weather.js файле у меня есть:

"использовать строгий";

exports.sometest = sometest; 

function sometest() { 
    request('http://api.openweathermap.org/data/2.5/weather?&appid=' + process.env.weather_api_key + '', (error, response, body) => { 
     return body; 
    }); 
} 

Тогда в моем index.js файл я включить его const testing = require("../../../lib/weather");.

Как я могу получить данные, которые я возвращаю в пределах функции, которую я создал? И мог бы кто-нибудь объяснить мне, как это работает, я немного запутался в плане обзора и синтаксиса и т. Д.

Спасибо.

ответ

0

Сначала я расскажу подробности, затем мы сможем ответить на ваш вопрос. Все о стандартах CommonJS. Стандарты CommonJS определяют следующие три компонента при работе с модулями:

  1. require(): Этот метод используется для загрузки модуля в ваш код.
  2. export: Этот объект содержится в каждом модуле и позволяет выявлять определенные функциональные возможности вашего кода при загрузке модуля с помощью require().
  3. module.exports: Предоставляет полный модуль при загрузке с использованием require().

Теперь вы должны собрали, что мы всегда требуемся модуль, если бы мы использовали метод 2 (разоблачение определенных функций) это то, что это будет выглядеть так:

//weather.js is the name of the file 
exports.sometest = function() { 
    request('http://api.openweathermap.org/data/2.5/weather?&appid=' + process.env.weather_api_key + '', (error, response, body) => { 
    return body; 
}; 

И тогда в вашем Индексный файл мы достигаем бы эту функцию так:

const testing = require('../../../lib/weather.js'); 
// access the method from the 'testing' object 
testing.sometest; 

Если вы хотите, чтобы выставить полный модуль:

// weather.js 
module.exports = function sometest() { 
    request('http://api.openweathermap.org/data/2.5/weather?&appid=' + process.env.weather_api_key + '', (error, response, body) => { 
    return body; 
    }); 
}; 

В index.js это будет выглядеть следующим образом:

const testing = require("../../../lib/weather"); 
weatherTest = testing(); 

Надеется, что это помогает.

0

Я думаю, что вы не правильно экспортируете свой модуль и добавляете дополнительную дополнительную проблему.

Как вы shold экспортировать модуль в weather.js является:

module.exports = function sometest() { 
    request('http://api.openweathermap.org/data/2.5/weather?&appid=' + process.env.weather_api_key + '', (error, response, body) => { 
     return body; 
    }); 
} 

, как вы включаете его в index.js порядке.

Вы должны помнить, что погода возвращает функцию, поэтому вам нужно ее выполнить. Но кроме того, что вы выполняете асинхронное действие, и там вы добавляете обратный вызов для вызова, когда доступен ответ. Итак, я хотел бы сделать это: index.js

const testing = require("../../../lib/weather")(callback) // callback is a function that will be executed when request in weather is done; 

weather.js

module.exports = function(callback) { 
     request('http://api.openweathermap.org/data/2.5/weather?&appid=' + process.env.weather_api_key + '', (error, response, body) => { 
      callback(body); 
     }); 
    } 

Итак, что здесь происходит. В weather.js вы возвращаете функцию. Эта функция выполняет асинхронный запрос, и когда запрос выполняется, выполните обратный вызов, предоставляемый index.js В index.js вам нужен файл и добавьте дополнительные круглые скобки для выполнения функции, возвращаемой погодой, которая, кроме того, выполняет обратный вызов если вы ответите на запрос асинхронного запроса.

Смежные вопросы