读取节点中的配置文件

时间:2015-03-27 17:31:30

标签: javascript node.js express

我希望我能尽可能详细地总结我的问题。我是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(),新值也永远不会被应用两个功能。

感谢您的帮助,请告诉我是否应该提供更多信息。

1 个答案:

答案 0 :(得分:0)

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