Как создать переменную из другого модуля.экспортирует файл постоянно

#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}`)
    })
})
  

пароль теперь динамически обновляется для всех мест, которые импортируют конфигурацию