gpt4 book ai didi

javascript - Node 服务器启动时解析json对象

转载 作者:行者123 更新时间:2023-11-30 12:18:20 25 4
gpt4 key购买 nike

当 Node server.js(这是我程序的入口点)启动时,我需要解析 json 对象,json 文件的解析是在我项目的不同模块中完成的。我有两个问题

  • 是否推荐在server.js文件中调用带事件的parse函数
  • 我阅读了有关 event.emiter 的内容,但不确定如何调用函数来自不同的模块...示例将非常有帮助

我有多个 JSON 文件

更新以使其更清楚

如果我在加载服务器/应用程序(server.js 文件)时读取 3 个 json 文件对象(每个 50 行),我想这会很快。我的场景是快速调用的有效路径列表在这个 json 文件中

app.get('/run1', function (req, res) { res.send('你好,世界!');});

所以 run1 应该在 json 文件中定义(比如路径的白名单)如果用户输入我没有定义的 run2 我需要提供错误所以我认为当服务器准备好执行此调用并使用所有配置有效路径保留此对象时,当用户进行调用时,只需获取已解析的对象(当服务器加载时)并验证其是否正常,我认为它更好的方法而不是做这个随叫随到

更新 2

我会尽量解释得更简单。让我们假设您有您应该收听的路径的白名单,像run1

app.get('/run1', function

这些路径列表定义在您项目中特定文件夹下的 jsons 文件中,在每次通过 express 调用您的应用程序之前,您应该验证请求的路径是否在 json 的路径列表中。 这是给定的。现在该怎么做。

目前我开发了一个模块,它在其中寻找 json 文件,并查找那里是否存在特定路径。

现在我认为正确的解决方案是当 Node 应用程序启动时调用此功能并在某个对象中保留有效路径列表,我可以在用户调用期间非常容易地访问这些对象并检查路径是否存在。

我的问题是当 Node 应用程序(Server.js)准备好提供这个对象时,如何向验证器模块提供一些事件。

最佳答案

如果它是应用程序初始化的一部分,那么您可以使用 fs.readFileSyncJSON.parse 同步读取和解析此 JSON 文件,或者 要求:

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

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

在这种情况下,JSON 数据将在您的服务器启动时加载和解析,您无需为回调或事件发射器而烦恼。

我看不到异步加载初始配置有任何好处,原因有二:

  1. JSON 解析的瓶颈在于解析器本身,但由于它是同步的,因此您在这里不会有任何收获。因此,您唯一能够优化的部分是与文件系统的交互(即从磁盘读取数据)。
  2. 在加载此数据之前,您的应用程序将无法正常工作。

更新

如果出于某种原因您无法同步初始化,您可以延迟启动应用程序,直到初始化完成。

这里最简单的解决方案是将 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)
})

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

// 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)
})

关于javascript - Node 服务器启动时解析json对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31773006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com