mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Generate instanceId and include in hash for cache busting
This commit is contained in:
parent
d7345d5bc6
commit
50627cd697
@ -51,7 +51,7 @@ module.exports = {
|
|||||||
|
|
||||||
var ui = require("./ui");
|
var ui = require("./ui");
|
||||||
|
|
||||||
ui.init(runtimeAPI);
|
ui.init(settings, runtimeAPI);
|
||||||
|
|
||||||
const editorApp = apiUtil.createExpressApp(settings)
|
const editorApp = apiUtil.createExpressApp(settings)
|
||||||
|
|
||||||
|
@ -25,15 +25,16 @@ var apiUtils = require("../util");
|
|||||||
var theme = require("./theme");
|
var theme = require("./theme");
|
||||||
|
|
||||||
var runtimeAPI;
|
var runtimeAPI;
|
||||||
|
let settings;
|
||||||
var editorClientDir = path.dirname(require.resolve("@node-red/editor-client"));
|
var editorClientDir = path.dirname(require.resolve("@node-red/editor-client"));
|
||||||
var defaultNodeIcon = path.join(editorClientDir,"public","red","images","icons","arrow-in.svg");
|
var defaultNodeIcon = path.join(editorClientDir,"public","red","images","icons","arrow-in.svg");
|
||||||
var editorTemplatePath = path.join(editorClientDir,"templates","index.mst");
|
var editorTemplatePath = path.join(editorClientDir,"templates","index.mst");
|
||||||
var editorTemplate;
|
var editorTemplate;
|
||||||
const version = require(path.join(editorClientDir,"package.json")).version
|
let cacheBuster
|
||||||
const cacheBuster = crypto.createHash('md5').update(version).digest("hex").substring(0,12)
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
init: function(_runtimeAPI) {
|
init: function(_settings, _runtimeAPI) {
|
||||||
|
settings = _settings;
|
||||||
runtimeAPI = _runtimeAPI;
|
runtimeAPI = _runtimeAPI;
|
||||||
editorTemplate = fs.readFileSync(editorTemplatePath,"utf8");
|
editorTemplate = fs.readFileSync(editorTemplatePath,"utf8");
|
||||||
Mustache.parse(editorTemplate);
|
Mustache.parse(editorTemplate);
|
||||||
@ -94,6 +95,12 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
editor: async function(req,res) {
|
editor: async function(req,res) {
|
||||||
|
if (!cacheBuster) {
|
||||||
|
// settings.instanceId is set asynchronously to the editor-api
|
||||||
|
// being initiaised. So we defer calculating the cacheBuster hash
|
||||||
|
// until the first load of the editor
|
||||||
|
cacheBuster = crypto.createHash('md5').update(`${settings.version || 'version'}-${settings.instanceId || 'instanceId'}`).digest("hex").substring(0,12)
|
||||||
|
}
|
||||||
|
|
||||||
let sessionMessages;
|
let sessionMessages;
|
||||||
if (req.session && req.session.messages) {
|
if (req.session && req.session.messages) {
|
||||||
|
@ -27,6 +27,7 @@ var express = require("express");
|
|||||||
var path = require('path');
|
var path = require('path');
|
||||||
var fs = require("fs");
|
var fs = require("fs");
|
||||||
var os = require("os");
|
var os = require("os");
|
||||||
|
const crypto = require("crypto")
|
||||||
|
|
||||||
const {log,i18n,events,exec,util,hooks} = require("@node-red/util");
|
const {log,i18n,events,exec,util,hooks} = require("@node-red/util");
|
||||||
|
|
||||||
@ -51,7 +52,7 @@ var adminApi = {
|
|||||||
var nodeApp;
|
var nodeApp;
|
||||||
var adminApp;
|
var adminApp;
|
||||||
var server;
|
var server;
|
||||||
|
let userSettings;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialise the runtime module.
|
* Initialise the runtime module.
|
||||||
@ -61,8 +62,9 @@ var server;
|
|||||||
* better abstracted.
|
* better abstracted.
|
||||||
* @memberof @node-red/runtime
|
* @memberof @node-red/runtime
|
||||||
*/
|
*/
|
||||||
function init(userSettings,httpServer,_adminApi) {
|
function init(_userSettings,httpServer,_adminApi) {
|
||||||
server = httpServer;
|
server = httpServer;
|
||||||
|
userSettings = _userSettings
|
||||||
|
|
||||||
if (server && server.on) {
|
if (server && server.on) {
|
||||||
// Add a listener to the upgrade event so that we can properly timeout connection
|
// Add a listener to the upgrade event so that we can properly timeout connection
|
||||||
@ -134,7 +136,10 @@ function start() {
|
|||||||
.then(function() { return settings.load(storage)})
|
.then(function() { return settings.load(storage)})
|
||||||
.then(function() { return library.init(runtime)})
|
.then(function() { return library.init(runtime)})
|
||||||
.then(function() {
|
.then(function() {
|
||||||
|
if (settings.get('instanceId') === undefined) {
|
||||||
|
settings.set('instanceId', crypto.randomBytes(8).toString('hex'))
|
||||||
|
}
|
||||||
|
userSettings.instanceId = settings.get('instanceId') || ''
|
||||||
if (log.metric()) {
|
if (log.metric()) {
|
||||||
runtimeMetricInterval = setInterval(function() {
|
runtimeMetricInterval = setInterval(function() {
|
||||||
reportMetrics();
|
reportMetrics();
|
||||||
|
@ -29,7 +29,7 @@ describe("api/editor/ui", function() {
|
|||||||
var app;
|
var app;
|
||||||
|
|
||||||
before(function() {
|
before(function() {
|
||||||
ui.init({
|
ui.init({}, {
|
||||||
nodes: {
|
nodes: {
|
||||||
getIcon: function(opts) {
|
getIcon: function(opts) {
|
||||||
return new Promise(function(resolve,reject) {
|
return new Promise(function(resolve,reject) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user