2017-10-05 50 views
1

我有兩個文件:如何訪問server.js文件之外的應用程序?

server.js

const app = express(); 
require('./server/config/crawlerBasedModels.config').basedModels() 
.then((models) => { 
    app.locals.basedModels = models; 
    console.log(app.locals.basedModels); 
}) 
.catch(err => console.log(err)); 

crawlerBasedModels.config:

const fs = require('fs'); 
const Promise = require('bluebird'); 
module.exports = { 
basedModels:() => { 
    return new Promise((res, rej) => { 
     let basedModelsPath = require('../config/exportFolderPath'); 
     const basedModels = JSON.parse(fs.readFileSync(basedModelsPath + '/basedModels.json')); 
     if(basedModels) {console.log(basedModels); return res(basedModels);} 
     return rej('couldnt load basedModels file!'); 
    }); 
} 
}; 

控制檯,我看到: 未定義

我的問題是,如何在我的應用程序中設置一個全局變量,以便在整個應用程序生命週期中公開?

回答

0

有兩種方法可以實現這一點。

<app.js> 
const app = module.exports = express(); 
app.locals.test = 'test is valid'; 

<anotherfile.js> 
const app = require('./app'); 
console.log(app.locals.test); 

現在,任何時候你需要app,它將設置app.locals,它會在另一個文件中可以對其進行訪問。

另一種方法是製作一個名爲global.js的單獨空白文件。

<global.js> 
empty file 

<test1.js> 
const global = require('./global'); 
global.test = 'setting var in test1.js'; 

<test2.js> 
const global = require('./global'); 
console.log('global vars %j', global); 

<node.js runtime> 
> const a = require('./test1.js') 
> const b = require('./test2.js'); 
global vars {"test":"setting var in test1.js"} 

這裏唯一需要注意的將是test1的有需要纔可以訪問全局變量。但是,您的用例也要求在app.locals中設置一些內容,然後在其他地方使用它。

相關問題