#javascript #node.js
#javascript #node.js
Вопрос:
Я пытаюсь создать вызов API для изменения переменной (в данном случае пароля) в другом файле (config.js ) и я хочу изменить значение «mainpassword» постоянно (или, по крайней мере, до тех пор, пока я не захочу изменить его снова), без необходимости выполнять сложные fs.ReadFile и писать ерунду.
Настройка config.mainpassword = "somethingelse"
не изменяет переменную в config.js файл
index.js
//...expressjs and other stuff here
const config = require('./config.js');
app.post('/api/admin/changesitepassword', (req, res) => {
config.mainpassword = "fumo123"
const conffile = require('./config.js')
delete require.cache[require.resolve('./config.js')];
return res.send(`Changed password: ${config.mainpassword}nconfig.js: ${conffile.mainpassword}`)
})
config.js
module.exports = {
//... other config info
mainpassword: 'fumo', // Password to lock behind
//... other config info
}
и когда я ОТПРАВЛЯЮ на него,
Changed password: fumo123
config.js: fumo
и это не меняется
Комментарии:
1. Самоизменяющийся код довольно ужасающий. И как бы вы вообще передали это в систему управления версиями? Просто используйте файл конфигурации (например, в формате JSON) и напишите «сложный файл fs.ReadFile и напишите ерунду» (что составляет около пяти строк, возможно, меньше).
2. Ну, что я имел в виду под материалом readfile, приходилось сканировать строки, проверяя, содержит ли строка поле пароля, сохранить эту строку в переменной, изменить часть, где пароль, затем выполнить какой-то другой сложный код для сохранения файла. Но вы доказываете свою точку зрения с помощью JSON
Ответ №1:
Что вы можете сделать, так это сохранять вашу конфигурацию в .json
файле всякий раз, когда она изменяется, и загружать ее при запуске вашего приложения.
При этом файл не будет отслеживаться на предмет изменений, поэтому, если вы измените пароль вручную в файле, вам придется перезапустить сервер.
{ "mainpassword": "fumo123" }
// config.js
const fs = require('fs') // some minimal amount of "bullshit" is required
const config = require('./config.json')
config.set = (key, value, callback) => {
config[key] = value
fs.writeFile('./config.json', JSON.stringify(config), 'utf-8', callback)
}
module.exports = config
и затем вы можете использовать свой set
метод для установки и сохранения изменений
app.post('/api/admin/changesitepassword', (req, res, next) => {
// i'm assuming express is used here, so I pass the error to `next`
config.set('mainpassword', "fumo321", err => {
if (err) return next(err)
return res.send(`Changed password: ${config.mainpassword}`)
})
})
пароль теперь динамически обновляется для всех мест, которые импортируют конфигурацию