2016-10-06 5 views
1

У меня есть файл config.ts который просто экспортирует объект конфигурации:доступа глобальные переменные из экспортируемой функции

const config = { 
    baseURL: <string> 'http://example.com', 
}; 

export default config; 

У меня есть еще один файл с именем methods.ts который импортирует объект конфигурации и экспортирует функцию, которая использует этот объект конфигурации.

import config from './config'; 

export function someMethod() { 
    let url = config.baseURL; 
    ... 
} 

Я звоню это someMethod изнутри экспресс-маршрутизатор:

import { someMethod } from '../methods'; 

router.get('/something', function(req, res, next) { 
    let x = someMethod(); 
    ... 
}); 

когда someMethod называется config переменная undefined. Кажется, someMethod не может видеть импортированные данные из того же файла, когда он вызывается позже. Каким будет правильный способ сделать это?

ответ

0

Узел обертывает ваш модуль в IIFE под названием the module wrapper, поэтому, хотя он и является глобальным в вашем модуле, он на самом деле все еще локальный.

Если у вас есть доступ к config вне вашего модуля, вам необходимо явно экспортировать его.

function someMethod() { 
    let url = config.baseURL; 
    ... 
} 
export { someMethod, config }; 

Если config на самом деле общие для нескольких файлов, вы можете использовать Dependency Injection и переместить config в файл, содержащий маршрутизатор, который нуждается в конфигурации.

Изменить someMethod принять config

// methods.ts 
function someMethod(config) { 
    let url = config.baseURL; 
    ... 
} 

export { someMethod }; 

Импорт ./config в маршрутизаторе, а и передать config в someMethod

// router 
import config from './config' 
import { someMethod } from '../methods'; 

router.get('/something', function(req, res, next) { 
    let x = someMethod(config); 
    ... 
}); 
+0

Я хочу 'config' быть доступен в' someMethod'. реэкспортировать его из этого файла не имеет никакого смысла ... –

+0

@KingJulien На мой взгляд, лучший способ приблизиться к этому - это ввести конфигурацию с вашего маршрутизатора. – peteb

+0

@KingJulien обновил мой ответ, чтобы включить пример, основанный на мой последний комментарий – peteb

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