Вставить в JSON переменную как имя атрибута
Нужно создать элемент в JSON из двух переменных - логин и пароль. Но при выполнении строчки json.login = password создается элемент не с именем переменной, а с именем "login".
Как можно вставить переменную как имя элемента?
Код:
const express = require("express");
const jsSHA = require("jssha");
const fs = require("fs");
const app = express();
app.use(express.static(__dirname + '/public'));
app.get("/auth", function(request, response){
response.sendFile(__dirname + "/templates/auth/index.html");
});
app.get("/api/auth/login", function(request, response){
const login = request.query.login;
const password = request.query.pass;
var jsonFile = fs.readFile("accounts.json", "utf8", function(err, data){
const json = JSON.parse(data);
json.login = password;
var jsonnn = JSON.stringify(json);
fs.writeFile("accounts.json", jsonnn, function(err, result){
if(err){
console.log("error");
}
});
});
});
app.listen(3000);
Ответы (1 шт):
Автор решения: nörbörnën
→ Ссылка
Инициализация объектов
const fakeRequest = {
query: { login: 'fake', pass: 'fake1' }
};
const fakeAccountsFileData = {
a: 'a', b: 'b', c: 'z'
};
const login = fakeRequest.query.login;
const password = fakeRequest.query.pass;
// Удобный способ
console.log({
...fakeAccountsFileData,
[login]: password
});
// Классический способ
fakeAccountsFileData[login] = password;
console.log(fakeAccountsFileData);
Ваш код с нормальной обработкой:
const fs = require('fs');
const express = require('express');
const jsSHA = require("jssha");
const app = express();
app.use(express.static(__dirname + '/public'));
app.get('/auth', function(request, response) {
response.sendFile(__dirname + '/templates/auth/index.html');
});
// тут должен быть .post
app.get('/api/auth/login', function(request, response) {
const login = request.query.login;
let password = request.query.pass;
fs.readFile('accounts.json', 'utf8', (err, data) => {
if (err) {
console.error(err);
response.status(500).send('SOMETHING_WRONG');
}
const accountsJson = JSON.parse(data);
accountsJson[login] = password; // hash password here
fs.writeFile(
'accounts.json',
JSON.stringify(accountsJson),
(err) => {
if (err) {
console.error(err);
response.status(500).send('SOMETHING_WRONG');
}
res.json({ ok: true });
});
});
});
app.listen(3000);