Учитывая общую архитектуру Express, это похоже на опцию конфигурации приложения, которая была бы естественной для app.get()
и app.set()
.
Добавить app.set()
, чтобы сохранить эту конфигурацию в объекте приложения:
exports.joe = (req, res) => {
const {dialog} = require("electron");
dialog.showOpenDialog(
{
filters: [
{name: "Anchor", extensions: ["anchor"]},
{name: "All Files", extensions: ["*"]},
],
properties: ["openFile"],
},
(loc) => {
fs.writeFile(locfile, loc, function(err) {
if (err) {
return console.log(err);
}
// save this on the app object as a configuration
req.app.set("imageDir", loc);
console.log("The new root location saved: " + loc);
});
res.redirect("/pie");
},
);
};
Затем в промежуточном программном обеспечении вы можете получить его в любое время:
app.use("/vids", (req, res, next) => {
return express.static(app.get("imageDir"))(req, res, next);
});
Это также предполагает, что app.set("imageDir", ...)
вызывается при запуске, чтобы установить для него некоторое функциональное значение.
Есть множество других способов сделать это.
- Вы можете установить или изменить переменную среды в
process.env
, а затем извлечь ее оттуда, когда это необходимо.
- Вы можете сохранить каталог как локальный модуль, а затем экспортировать функцию, которая будет возвращать текущее значение этой переменной в любое время.
- Вы могли бы создать промежуточное программное обеспечение ранней стадии, которое установило бы каталог как пользовательское свойство для объекта
req
, чтобы все последующие промежуточные программы могли получить к нему доступ. Похоже, это была ваша первая мысль о том, как это сделать. Это не мой фаворит, потому что на самом деле это просто параметр конфигурации, поэтому кажется более естественным обращаться с ним, как с другими параметрами конфигурации с app.get()
или двумя вышеуказанными параметрами.
- Вы можете установить глобальное свойство
global.imageDir
, к которому можно получить доступ из любого места.
К вашему сведению, в вашем коде showOpenDialog()
отсутствует проверка на отмену диалога.