Надеюсь, что я могу подытожить свой вопрос с максимальной детализацией. Я новичок в 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() в других моих двух функциях.
Спасибо за любую помощь, сообщите мне, если я должен предоставить дополнительную информацию.
Мне кажется, что вам нужен что-то похожее на db-коннектор для файла конфигурации. –