节点服务器启动时parsingjson对象

当节点server.js(这是我的入口点)开始时,我需要parsingjson对象,json文件的parsing是在我的项目的diffrent模块中完成的。 我有两个问题

  • build议使用server.js文件中的事件调用parsing函数
  • 我读了关于event.emiter,但不知道如何从不同的模块调用函数…例子将是非常有益的

我有多个JSON文件

更新使其更清楚

如果我读取3个json文件对象(每行50个),当服务器/应用程序加载(server.js文件),这将是快速的我猜。 我的情况是,快速调用的有效path的列表是在这个JSON文件

app.get('/ run1',function(req,res){res.send('Hello World!');});

所以run1应该在json文件中定义 (如path的白名单 ),如果用户把我没有定义的run2我需要提供错误,所以我认为,当服务器是要做这个调用,并保持与所有configuration有效的objpath和当用户打电话只是得到这个对象哪个alreayparsing(当服务器加载),并validation是否可以,我认为它更好的方法,而不是这样做

更新2

我会尝试更简单的解释。 让我们假设你有一个你应该听的path的白名单 ,比如run1

app.get('/run1', function 

这些path列表是在特定文件夹下的项目中的jsons文件中定义的,在每次通过express对应用程序进行调用之前,都应该validation所请求的path是否位于json的path列表中。 这是给出的 。 现在该怎么做。

目前我已经开发了一个模块来查找这个json文件,并且在那里find特定的path。

现在我认为正确的解决scheme是,当节点应用程序开始调用这个function,并在一些对象中保存有效path列表时,在用户调用期间我可以非常容易地访问它,并检查path是否存在。

我的问题是如何在节点应用程序(Server.js)提供此对象时向validation程序模块提供一些事件。

如果它是应用程序初始化的一部分,则可以使用fs.readFileSyncJSON.parse同步读取和parsing此JSON文件,也可以使用以下fs.readFileSync

 var config = require('path/to/my/config.json'); 

只需确保在app.listen调用之前,在应用程序根目录中需要处理此JSON加载的模块。

在这种情况下,JSON数据将在服务器启动的时候被加载和parsing,并且不需要使用callback函数或事件发射器来解决问题。

由于两个原因,我看不到asynchronous加载初始configuration的好处:

  1. JSONparsing的瓶颈是parsing器本身,但是由于它是同步的,在这里你不会得到任何东西。 所以,你将能够优化的唯一部分是与你的文件系统的交互(即从磁盘读取数据)。
  2. 在加载这些数据之前,您的应用程序将无法正常工作。

更新

如果由于某种原因,你不能使你的初始化同步,你可以延迟启动你的应用程序,直到初始化完成。

最简单的解决scheme是在初始化callback中移动app.listen部分:

 // initialization.js var glob = require('glob') var path = require('path') module.exports = function initialization (done) { var data = {} glob('./config/*.json', function (err, files) { if (err) throw err files.forEach(function (file) { var filename = path.basename(file) data[filename] = require(file) }) done(data); }) } 
 // server.js var initialization = require('./initialization') var app = require('express')() initialization(function (data) { app.use(require('./my-middleware')(data)) app.listen(8000) }) 

另一种解决scheme是使用简单的事件发射器来发信号表示您的数据已准备就绪:

 // config.js var glob = require('glob') var path = require('path') var events = require('events') var obj = new events.EventEmitter() obj.data = {} glob('./config/*.json', function (err, files) { if (err) throw err files.forEach(function (file) { var filename = path.basename(file) obj.data[filename] = require(file) }) obj.emit('ready') }) module.exports = obj 
 // server.js var config = require('./config') var app = require('express')() app.use(require('./my-middleware')) config.on('ready', function () { app.listen(8000) })