从导出的函数访问全局变量

时间:2016-10-06 14:33:05

标签: node.js express typescript

我有一个文件C:\Users\XY\AppData\,它只是导出一个配置对象:

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在以后调用时无法从同一文件中看到导入的数据。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

Node将您的模块包装在名为the module wrapper的IIFE中,因此即使它在您的模块中是全局的,它实际上仍然是本地的。

如果您想要访问模块之外的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);
    ...
});

答案 1 :(得分:0)

我相信您可以做到

import config from './config';
var Config = config
export function someMethod() { console.log(Config) }