正在读取节点中的配置文件

Reading Configuration File in Node

本文关键字:配置文件 节点 读取      更新时间:2023-09-26

我希望能尽可能详细地总结我的问题。我是NodeJS的新手,所以要友善:D

我正在节点中编写一个应用程序,允许人们在Plex媒体库中查看统计数据。我将配置存储在文件config.ini中。文件中的设置包括:应用程序的url库,应用程序将在其上运行的端口,他们的Plex用户名&密码、要在索引上显示的电影或剧集的数量以及一些其他设置。我有一个配置模板&路由,允许他们更新这些设置,并使用新值更新文件。

我的问题在于如何让Node动态读取这个文件。当用户通过我的config.js路由器更新配置时,需要重新启动应用程序才能读取新值。(有些事情,比如url_base/port,需要重新启动应用程序,我稍后会处理)但简单的事情,比如更改要显示的电影或剧集数量,不需要重新启动。

例如,看看我的index.js路线,它显示了少量信息:

var express = require('express');
var Q       = require('q');
var util    = require('util');
// Define router
var router = express.Router();
// Load config
var UserConfiguration = require('../lib/config');
var config = new UserConfiguration();
// Load plex
var Plex = require('../lib/plex');
var plexClient = new Plex({
    hostname: config.getPlexHost(),
    port: config.getPlexPort(),
    username: config.getPlexUser(),
    password: config.getPlexPassword(),
    token: config.getPlexAuthToken()
});
// Plex is down or we couldn't get in
if(plexClient.ping() !== true) {
    res.render('pages/index', {
        page_title: 'home',
        plexRecentMovies: null,
        plexRecentEpisodes: null
    });
}
// Retrieve new episodes, pass in config setting for limit
function recentlyAddedEpisodes(req, res, next) {
    var recentEpisodes = plexClient.shows()
    .then(function (showSection) {
        return showSection.key;
    })
    .then(function(key) {
        plexClient.getRecentlyAddedEpisodes(key, config.getRecentEpisodes())
        .then(function(episodes) {
            req.recentlyAddedEpisodes = episodes;
            return next();
        });
    });
}
// Retrieve new movies, pass in config setting for limit
function recentlyAddedMovies(req, res, next) {
    var recentMovies = plexClient.movies()
    .then(function (movieSection) {
        return movieSection.key;
    })
    .then(function(key) {
        plexClient.getRecentlyAddedMovies(key, config.getRecentMovies())
        .then(function(movies) {
            req.recentlyAddedMovies = movies;
            return next();
        });
    });
}
function renderIndexPage(req, res) {
    res.render('pages/index', {
        page_title: 'home',
        plexRecentMovies: req.recentlyAddedMovies,
        plexRecentEpisodes: req.recentlyAddedEpisodes
    });
}
// Finally render the template
router.get('/',
    recentlyAddedEpisodes,
    recentlyAddedMovies,
    renderIndexPage
);
module.exports = router;

我确信我这样做的方式不正确,因为router.get()之外的所有东西似乎都被缓存了,所以即使我在其他两个函数中调用config.getSomeSetting(),新值也永远不会被应用。

谢谢你的帮助,如果我应该提供更多信息,请告诉我。

您可以切换到json而不是ini,然后使用我的json-update模块。