Начинаясь с SQLite

Я работаю с NodeJS, в течение времени, работал с файлами JSON, чтобы хранить информацию многих пользователей, но сейчас противостою мне проблеме, разложение данных (файл повторно написан почти постоянным способом), так что я хочу изменить все функции в SQLite, чтобы предотвращать разложение данных.

Мой файл JSON обладает следующими полями:

{
  "161104821108080640": {
    "points": 0,
    "level": 0,
    "time": 1483466910038,
    "color": "ff239d",
    "money": 0,
    "rep": 0,
    "timerep": 1483466910038,
    "timemoney": 1483466910038,
    "id": "161104821108080640"
  }
}

Я хочу, чтобы у файла SQLite были те же данные, для этого, должен быть создан новый ввод, когда идентификация пользователя не будет найдена. Также я буду нуждаться в том, чтобы знать, как он мог бы соглашаться позже на эти данные.

На данный момент, это способ, с которым я работаю с моим файлом JSON:

let points = JSON.parse(fs.readFileSync('./points.json', 'utf8'));
let userData = points[msg.author.id];
if (!userData) {
  userData = {
    points: 0,
    level: 0,
    time: msg.createdTimestamp,
    color: "ff239d",
    money: 0,
    rep: 0,
    timerep: msg.createdTimestamp,
    timemoney: msg.createdTimestamp
  };
  points[msg.author.id] = userData;
}

В чем, Ваша информация становится отвечающей современным требованиям автоматическим способом со следующим кодом:

if (msg.createdTimestamp - userData.time <= 60000) return;
var addin = Math.max(Math.ceil(Math.random() * 10), 5);
userData.points = userData.points + addin;
userData.time = msg.createdTimestamp;

То, что он делает, проверяет timestamp последнего раза, который получил точки, если они произошли больше 1 minuto (60000 ms), тогда он добавит случайное количество точек, определенный переменной addin.

Как он мог бы делать то же самое, но используя SQLite вместо JSON?

1
задан 03.01.2017, 22:43
0 ответов

Пакет, рекомендуемый, чтобы работать с SQLite состоит sqlite3, большая против es в том, что он основан в callbacks и не в обещаниях, что делает код, самый тяжелый для того, чтобы настаивать, делаешь ли ты укрытые консультации. Сверху, члены не заинтересованы в том, чтобы использовать обещания в будущих версиях. Однако, есть пакет, созданный знакомым Коистйя, sqlite, который является только wrapper ES6 + для sqlite3. Другой, который, personalmene я использую много, sequelize, но это ORM и подумался для средних / больших приложений.

API - та же самая, что sqlite3, но вместо callbacks, ты должен использовать обещания

Первое, что ты должен делать, состоит в том, чтобы создавать таблицу для пользователей:

Заметь: если ты используешь Node v7.x или Вавилон, ты можешь извлекать пользу async/await: const expectedResult = await methodThatReturnPromise();

Присоединяться в SQLite

import db fron 'sqlite';


db.open('estadisticas.db')
  .then(() => {
    console.log('SQLite connected');
  })
  .catch(e => {
    console.log('Cannot connect to SQLite');
    console.log(e);
  });

Ты консультируешься в SQLite

Консультации - в общем и текущем SQL. Например:

Создавать пользователь:

function createUser ({
  uid, username, points, money, level,
  rep, color, time, timerep, timemoney
}) {
  const sql = 'INSERT INTO users (uid, username, points, money' +
              ', level, rep, color, time, timerep, timemoney) ';
  sql += `VALUES (${uid}, ${username}, ${points}, ${money}, ${level},
         ${rep}, ${color}, ${time}, ${timerep}, ${timemoney})`;

  return db.run(sql);
}

createUser({ uid: 'dfudif3', username: 'johndoe', ...)
  .then(() => {
    console.log('Usuario creado');
  })
  .catch(e => {
    console.log(`No se pudo crear el usuario: ${e.message}`);
  });

Логику, которую ты считаешь осуществленной, ты не должен менять много, одинокий приспосабливать ее к консультациям SQL.

2
ответ дан 03.12.2019, 17:53
  • 1
    Блестящий вклад, ¿ cuá l serí в có я говорю má s правильный, чтобы проверять, существует ли пользователь? И когда он не существует, ¿ qué возврати? ¿ null, undefined? ¿ Или quizá s ошибка 400 Бад Рекест? –  05.01.2017, 16:19
  • 2
    Чтобы проверять, существует ли пользователь ты должен искать из-за id / uid. funció n, который ты должен использовать, чтобы выбирать, get. Например: db.get( SELECT * FROM users WHERE пойдите = $ {пойдите} ).then(rows => { ... }). É sta funció n ты devolverá количество реестров, если количества 0,, - потому что он не находился очевидно. –  05.01.2017, 16:25
  • 3
    có digos HTTP должны манипулировать ими из-за ló gica дела. Например, segú n твои правила, cuá ndo должен посылать себе 400, 500, 403, и т.д. –  05.01.2017, 16:27
  • 4
    привет у меня проблемы есть с select ты помогаешь мне? –  15.06.2019, 05:27
  • 5
    @srJJ конечно напечатай твой вопрос :) –  17.06.2019, 22:57

Прежде всего твой вопрос очень широк, но я попробую помогать... В первом месте это почти то же самое, что и то, что ты делаешь в твоем json, что я предполагаю, что ты используешь MongoDb, но с командами sql.

Сначала ты должен устанавливать книжный магазин sqlite3 с npm, я оставляю тебе соединение официальной документации.

https://github.com/mapbox/node-sqlite3

Потом

var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database(':memory:');

db.serialize(function() {
  db.run("CREATE TABLE lorem (info TEXT)");

  var stmt = db.prepare("INSERT INTO lorem VALUES (?)");
  for (var i = 0; i < 10; i++) {
stmt.run("Ipsum " + i);
  }
  stmt.finalize();

  db.each("SELECT rowid AS id, info FROM lorem", function(err, row) {
console.log(row.id + ": " + row.info);
  });
});

db.close();

Ты это используешь так, инициализируешь книжные магазины, используешь db run Поверьте, чтобы создавать db

И ты используешь INSERT чтобы вводить, UPDATE чтобы обновлять данные и DELETE чтобы удалять их, aaah и SELECT чтобы искать их, это то же самое, что у тебя есть, только, что и ты должен сохранять их с sql.

В конце концов не забывай закрыть db с db.close() после каждого использования.

Привет

Редактирование:

Идет пример

var db = new sqlite3.Database(ruta);
db.each("SELECT _id AS _id,huellac FROM personal WHERE _id = $useraux", {
$useraux: id
  },
  function(err, row) {
huellac = row.huellac; //esto es si encuentra uno
  },
  function(err, rows) {
if (rows != 0) { //al terminar la busqueda si no encuentra nada
  insertarBd();
};
  });

function insertarBd() {
  var insertar = db.prepare("INSERT INTO personal VALUES (?,?,?,?,?,?,?,?,?,?,?)");
  insertar.run(id, fechaact, nombre, apellido, cedula, fechanac, subempresa, dpto, acceso, habkyb, huellac);
  insertar.finalize();
}

В примере ты можешь видеть, что я делаю поиски из-за id, ты можешь делать ее из-за поля, которое ты хочешь, если он находит реестр, будь помечен там, что я это показываю из-за консоли, если не, закончившись, rows его 0, так как он ничего не находит, и поэтому я делаю один INSERT данных (я в примере ввел данные служащего).

Привет

1
ответ дан 03.12.2019, 17:53
  • 1
    Прежде всего, несколько разработчиков, которые работают в том же самом, что я мне рекомендовали использовать SQLite вместо SQLite3 , так как что первый añ ade promises ES6 и миграции SQL. ¿ Весь этот có я говорю, что ты написал funcionarí в в SQLite3? И нет, я не использую ни MongoDb ни ничего из этого, использую fs и совсем не má s, операции - manipulació n файлов JSON начиная с Javascript для чистого NodeJS, без librerí схвати приходящие ученицы. –  04.01.2017, 18:05
  • 2
    é sto он для sqlite3, если ты нуждаешься для sqlite, это почти то же самое, но с книжным магазином sqlite envez sqlite3, я рекомендую тебя sqlite3, это использую с node и функционируй роскошно –  04.01.2017, 18:10
  • 3
    ló gica твоего кода será та же самая только, что вместо того, чтобы писать файл hará s insert в твой db, вместо того, чтобы читать select и я заношу в список –  04.01.2017, 18:13
  • 4
    Y... ¿ có mo añ ado поля? А именно, что, когда пользователь не будет найден, что ввел в db идентификацию пользователя со всеми Вашими данными (points, money, rep, я украл...) –  05.01.2017, 12:04
  • 5
    Ты делаешь select пользователя, если он возвращает тебя, это потому, что он существует, если он не возвращает так как, делаешь insert –  05.01.2017, 12:23

Теги

Похожие вопросы