У меня есть требование, когда мне нужно рендерить динамические страницы для определенных маршрутов.
Эти маршруты будут в первую очередь добавлены на работающий сервер, чтобы соответствующая страница маршрутов могла быть сгенерирована в приложении изоморфного реагирования и обслуживаться динамически.
Для текущей настройки все работает, но я застрял на том, как динамически перезагружать маршруты во время работы сервера.
Попробовал следующий код, и он работает, но только до запуска сервера.
var articlesEndpoints = ['/article2', '/article3'];
articlesEndpoints.forEach(function (name) {
console.log(name);
app.get(name, function (req, res) {
res.send(name);
});
});
Итак, прежде всего мне нужен механизм для сохранения динамических маршрутов (/article1,article2 ,.......,article N) в каком-то месте и запуска перезапуска сервера.
Перед перезапуском сервера он должен загрузить эти URL-адреса в массив и добавить динамические маршруты до перезапуска.
Хотя попытался использовать express-route-refresh
модуль узла, но не смог заставить его работать.
Мне нужно указать, где следует обновить список динамических маршрутов (например, файл) или любым другим альтернативным способом, чтобы сервер каждый раз считывал обновленный файл перед перезапуском.
Любой надлежащий механизм, где это может быть достигнуто автоматически при обновлении файла, если мы сохраним маршруты в файле как плоский список.
Любая помощь будет для меня большим подспорьем.
Ниже мой server.js
/*globals process, console */
/*eslint no-console: ["error", { allow: ["log", "warn", "error"] }] */
if (process.env.NODE_ENV === "production" || process.env.NODE_ENV === "preprod") {
require('newrelic');
}
import express from 'express';
import dotenv from 'dotenv';
import userAgent from 'express-useragent';
import compression from 'compression';
import cookieParser from 'cookie-parser';
import routes from './src/routes/';
import middleware from './src/utils/middleware';
import redirection from './src/utils/redirection';
import bodyParser from 'body-parser';
import path from 'path';
import cluster from 'cluster';
import os from 'os';
import { ASSET_BASE } from './src/config/common_conf';
if (cluster.isMaster) {
let cpuCore; // Total no of CPU Cores.
// Master cluster will setup the forks based on no of cores available.
if (process.env.NODE_ENV === "development") {
cpuCore = 1; // Total no of CPU Cores.
} else {
cpuCore = os.cpus().length; // Total no of CPU Cores.
}
console.log("Master cluster setting up " + cpuCore + " workers.");
for (let i = 0; i < cpuCore; i += 1) {
// Fork the process.
cluster.fork();
}
cluster.on("online", (worker) => {
console.log("Worker " + worker.process.pid + " is online");
});
// When process dies, replace it with a new fork.
cluster.on("exit", (worker, code, signal) => {
console.log("Worker " + worker.process.pid + " died with code: " + code + ", and signal: " + signal);
console.log("Starting a new worker");
cluster.fork();
});
} else {
// Config required for Env variables.
dotenv.config();
// Create the Express app.
const app = express();
app.use(function (req, res, next) {
"use strict";
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "content-type");
next();
});
// Sync the redirection URLs
redirection.syncCache();
//To parse cookies
app.use(cookieParser());
// Middleware for parsing incoming request bodies
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
// Compression middleware which attempts to compress response bodies
app.use(compression());
/* Do not disturb the order of Middleware */
// Middleware: To identify the browser information
app.use(userAgent.express());
// Middleware: Utility middleware
app.use(middleware);
// Middleware: Redirection middleware
app.use(redirection.isRedirectable);
// Make all the files in build_public folder availale to the outside world.
app.use(`/${ASSET_BASE}`, express.static(path.resolve(__dirname, 'build_public')));
app.use(`/${ASSET_BASE}`, express.static(path.resolve(__dirname, 'images')));
/* var articlesEndpoints = ['/article2', '/article3'];
articlesEndpoints.forEach(function (name) {
console.log(name);
app.get(name, function (req, res) {
res.send(name);
});
}); */
// Routes to be served
routes(app);
app.listen(process.env.PORT, () => {
console.log('Started SEO server on ', new Date().toISOString());
console.log('Env:', '\x1b[31m', process.env.NODE_ENV, '\x1b[0m');
console.log('Port:', '\x1b[31m', process.env.PORT, '\x1b[0m');
});
}
Текущий файл маршрутов выглядит так:
module.exports = function (app) {
app.get('/', (req, res) => {
res.status(200).json({message: "ok"});
});
app.get('/abc-directory/:pageId?', [commonMw], abcRenderer.renderRoutesABC);
}