2015-03-27 4 views
0

Надеюсь, что я могу подытожить свой вопрос с максимальной детализацией. Я новичок в NodeJS, так что будьте милы: DЧтение файла конфигурации в узле

Я пишу приложение в узле, что позволит людям видеть статистику в своих библиотеках Plex Media. Я сохраняю свою конфигурацию в файле config.ini. Параметры в файле включают: базу URL-адреса приложения, порт, на котором будет запущено приложение, их имя пользователя Plex &, количество фильмов или эпизодов для отображения по индексу и несколько других настроек. У меня есть шаблон конфигурации &, который позволяет им обновлять эти параметры, и файл обновляется с новыми значениями.

Моя проблема заключается в том, как заставить этот файл читать динамически по узлу. Когда пользователь обновляет конфигурацию через мой маршрутизатор config.js, он перезагружает приложение, чтобы считывать новые значения. (Somethings, такие как 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() в других моих двух функциях.

Спасибо за любую помощь, сообщите мне, если я должен предоставить дополнительную информацию.

+0

Мне кажется, что вам нужен что-то похожее на db-коннектор для файла конфигурации. –

ответ

0

Вы можете переключиться на json вместо ini, а затем использовать мой модуль json-update.

Смежные вопросы