
Valeriu
03.04.2018
16:15:04

Cenator
03.04.2018
16:15:09

Сергей
03.04.2018
16:15:41
https://habrahabr.ru/post/352688/

Grigorii
03.04.2018
16:16:08
Кто знает, может человеку больше надо SQLite подобное
Хотя, Sequelize же, в таком простом приложении можно будет одной строчкой СУБД менять

Google

Ruslan
03.04.2018
16:18:11
Зачем постгре для такой задачи?

Andruha
03.04.2018
16:18:12
а ты параллельно сохраняешь item-ы?
да, и чую в этом загвоздка, но как сделать последовательно не соображу, только постигаю ноду и жс в целом, но делал вывод в консоль сколько айтемов сохранено, и сколько айтемов запушено - в консоли цифры сходятся

Grigorii
03.04.2018
16:20:57
Чтобы плохому не учиться

Валера
03.04.2018
16:21:52
Значит, предварительно:
Express – конструктор
MySql, sequelize – база данных
Passport – авторизация.

Vitaliy
03.04.2018
16:22:23
hapi hapi-auth-jwt2.0

Валера
03.04.2018
16:22:29
Странно, почему mоngoose никто не рекомендует, но не моего это ума дело

Vitaliy
03.04.2018
16:22:42
mongoose хорош

Grigorii
03.04.2018
16:23:03

Ruslan
03.04.2018
16:23:15

Andruha
03.04.2018
16:23:15

Alexander
03.04.2018
16:23:18
jwt - сила

Валера
03.04.2018
16:23:42

Google

Ruslan
03.04.2018
16:23:53
JsonWebToken

Вася
03.04.2018
16:23:59
так а за что его рекоммендовать, ваш монгус?

Ruslan
03.04.2018
16:24:05
Почитай статью на Вики, там всё понятно

Вася
03.04.2018
16:24:22
я бы на самом деле вообще никакую orm не рекоммендовал бы

Ruslan
03.04.2018
16:24:25
В npm есть библиотека для работы с jwt, jsobwebtoken так и называется

Grigorii
03.04.2018
16:24:27

Вася
03.04.2018
16:25:00
меня еще всегда фанила валидация модели в монгусе
вот нахуя, кто объяснит?

Vitaliy
03.04.2018
16:25:07

Вася
03.04.2018
16:25:17
ну я могу поспорить за это

Vitaliy
03.04.2018
16:25:18
так она везде есть

Вася
03.04.2018
16:25:26
смотри
ща буду длинное сообщение писать
бля, сумбурно получается, дай мне время
вот смотри, предположим мы создаем проект с нуля. нам нужно реализовать простейший функционал, иметь поддержку аккаунтов, простейший acl и инсерт и чтение одной двух коллекций которые привязаны к домену проекта
так?

Vitaliy
03.04.2018
16:29:47
ага

Вася
03.04.2018
16:30:04
тут даже не онли про монгу, по мне, так единственный плюс орм для релеек - это встроенные механизмы миграций
но го про монгу
в итоге на первом этапе будет правельнее заюзать обычный драйвер монги

Google

Вася
03.04.2018
16:30:52
ну если это, предположим, конечная точка нашего приложения. ну нахуй нам тянуть монгус

Vitaliy
03.04.2018
16:30:54
mongoose не орм

Вася
03.04.2018
16:31:01
ну как не орм

Vitaliy
03.04.2018
16:31:01
а одм
если я не ошиб

Вася
03.04.2018
16:31:06
аа =)
ну ок

Grigorii
03.04.2018
16:31:19
я бы на самом деле вообще никакую orm не рекоммендовал бы
* Защита от SQL инъекций из коробки
* Абстра(о)гирование от конкретного диалекта для небольших (несложных) проектов. Одна строчка и вот оно уже работает на sqlite
* Могут быть встроенные фичи типа дополнительного кеширования, статистики, логирования и много всего
* Миграции
* Валидаторы
* Удобства типа создать моделько, поработать, а потом может сохранить (обновить), а может нет и т.д.

Вася
03.04.2018
16:31:23
ну ты же понимаешь о чем я, зачем цепляешься

Grigorii
03.04.2018
16:31:42


Вася
03.04.2018
16:31:47
ща отвечу
* Защита от SQL инъекций из коробки
* Абстра(о)гирование от конкретного диалекта для небольших (несложных) проектов. Одна строчка и вот оно уже работает на sqlite
* Могут быть встроенные фичи типа дополнительного кеширования, статистики, логирования и много всего
* Миграции
* Валидаторы
* Удобства типа создать моделько, поработать, а потом может сохранить (обновить), а может нет и т.д.
* ну мы про монгу, но это вопрос программирования и программиста. ок пускай будет +
* orm/odm тебя еще больше привязывают к конкретному решению
* это не золотая пуля, и как правило в последствии тебе приходится воевать с этими механизмами кэширования, которые тебе еще неделю назад помогали
* это да, я про это выше написал
* при подготовке запроса для базы данные уже должны быть свалидированы. если кто-то валидирует данные с помощью орм/одм - ну бля удачи
* модельку нужно привязывать к структурам данных проекта, а не структуры вязать на орм/одм


Вася
03.04.2018
16:37:31
по поводу валидаций на уровне орм/одм у меня вообще бомбит


Grigorii
03.04.2018
16:38:30
* ну мы про монгу, но это вопрос программирования и программиста. ок пускай будет +
* orm/odm тебя еще больше привязывают к конкретному решению
* это не золотая пуля, и как правило в последствии тебе приходится воевать с этими механизмами кэширования, которые тебе еще неделю назад помогали
* это да, я про это выше написал
* при подготовке запроса для базы данные уже должны быть свалидированы. если кто-то валидирует данные с помощью орм/одм - ну бля удачи
* модельку нужно привязывать к структурам данных проекта, а не структуры вязать на орм/одм
* Когда я писал ответ, я думал, что про ORM
* вот про привязку не очень согласен
* золотых пуль вообще нет, а всякие потенциально опасные вещи обычно отключать можно легко.
* А про валидацию почему так? Вот наоборот не согласен. У меня есть модель. У неё есть конкретные ограничения. Почему бы мне не прописать все эти ограничения там же, где я описываю модель, и там же не прописать разные сообщения, которые выдаются.
* Про последнее - чисто про удобство кодирования, ибо именно для этого они и созданы, чтобы было проще и красивее собственно кодитить


Вася
03.04.2018
16:38:56
ну давай для начала про валидацию

Sergey
03.04.2018
16:39:00
>Защита от SQL инъекций из коробки
сейчас вроде чуть ли не все имеет такую защиту, если не плейнтекстом пихать.
в любом случае когда проектик становиться жирным, без чистого SQL все равно никак.

Stas
03.04.2018
16:39:03
перебираю массив, с каждым элементом делаю
const newItem = new Item(obj);
Item.save(newItem, function(err, item) {
game.items.push(item);
game.save(callback);
});
в итоге в таблице item получаю N записей (все правильно), а в таблице Game получаю грубо 50*N референсов
по-моему у тебя в айтем падает весь массив, и ты этот массив пушишь в айтемс, получается у тебя на 1 итерации в гэйм массив [1], на второй [1, 1, 2], на третей [ 1, 1, 2, 1, ,2 ,3] и т.д.
может тебе нужно пушить item[item.length-1]?

Grigorii
03.04.2018
16:40:14

Вася
03.04.2018
16:41:57
только я пока про монгу буду писать, по поводу sql потом

Grigorii
03.04.2018
16:42:04
В большом проекте один фиг, если не испоьлзуется ORM, придётся делать свою прослойку какую-то для работы с БД.

Google

Grigorii
03.04.2018
16:42:16

Вася
03.04.2018
16:42:52
ок, ща сохраню в черновик и давай про sql =)
ну смотри, все sql базы имеют встроенную концепцию модели, так?

Andruha
03.04.2018
16:43:29
по-моему у тебя в айтем падает весь массив, и ты этот массив пушишь в айтемс, получается у тебя на 1 итерации в гэйм массив [1], на второй [1, 1, 2], на третей [ 1, 1, 2, 1, ,2 ,3] и т.д.
может тебе нужно пушить item[item.length-1]?
точно нет, братан, один айтем падает, вот так точнее:
_.each(marketItems, function(obj, index, list) {
const newItem = new Item(obj);
Item.save(newItem, function(err, item) {
game.items.push(item);
game.save(callback);
});
}

Вася
03.04.2018
16:43:30
ну типо схема
@ShaGrisha
вся эта тенденция джавовскай, мутить абстракции над абстракциями с годами (для меня) начинает выглядеть избыточной
вот блять, кложа

Admin
ERROR: S client not available

Grigorii
03.04.2018
16:45:44
Всё программирование построено на абстракциях, моделях, виртуализации и прослойках
За счёт этого с годами в истории в программировании приложения всё прикольнее, а делаются всё проще

Вася
03.04.2018
16:46:13
я не писал что абстракция - плохо
я говорю что излишество приводи к головной боли
смотри, что легче - иметь два валидатор (один на уровне формирования данных, вторйо на уровне орм), или один хороший на уровне формирования данных?

Max
03.04.2018
16:47:15
я на Koa рендерю стриничку с помощью мидлвари koa-views. На самой страничке у меня подключаются файлы js/css там же у меня путь прописан относительно файла html. Но когда страничка прилетает в браузер все эти файлы запрашиваються с путя localhost:3000/test/sometextв моем случаи . Как это исправляется, что бы файлы брались с папки?

Morsik
03.04.2018
16:47:25

Вася
03.04.2018
16:47:38
ну хотя постой, меня не туда загнало.

Grigorii
03.04.2018
16:47:43
А есть ли излишество?
Мне всё равно надо где-то описывать валидацию.
Почему бы не описать валидацию модели Стул там, где я описал Стул?
Кроме того, я уже писал, один фиг нужна в большом проекте будет прослойка в любом случае (логгирование и всё такое).

Вася
03.04.2018
16:48:57
ну ты мыслишь как настоящий ООП-шник

Grigorii
03.04.2018
16:49:05
Не люблю ООП

Google

Вася
03.04.2018
16:49:11
ты должен валидировать *данные* а не их описание

Morsik
03.04.2018
16:49:36
т.е. валидация на входе а не при сохранении в бд?

Grigorii
03.04.2018
16:49:49
А никто не говорил, что при сохранении
Sequelize позволяет делать валидацию, и это не имеет отношения к сохранению в БД

Вася
03.04.2018
16:50:11
ну ок, вы на своих проектах валидируете данные только при помощи орм?

Grigorii
03.04.2018
16:50:52
На входе пишу
Armchair(DataFromUser).validate()

Вася
03.04.2018
16:52:13
ну ок, я вас понял ?
я предпочитаю отдавать в функции для работы с базой отвалидированные данные.
вот и вся наука

Grigorii
03.04.2018
16:52:23
Они пройдут через validate, а потом пойдут в функции для работы с БД

Вася
03.04.2018
16:53:11
да я понимаю, я имею ввиду, что пришедшие ко мне данные из вне (не важно, http, stdin), они предварительно будут провалидированы
и вставлены в sql запрос например

Grigorii
03.04.2018
16:53:49
Кто будет гарантировать их валидность?
Давай ситуацию теперь от меня.
У тебя три модели А, Б и В.
И три типа запросов, З1, З2, З3.
В З1 используются все модели.
В З2 испоьзуется А и Б.
В З3 используется Б и В.
Сколько раз ты напишешь код, проверяющий, что А.name не содержит пробелов?

Morsik
03.04.2018
16:54:24

Andruha
03.04.2018
16:55:08

Grigorii
03.04.2018
16:55:32

Morsik
03.04.2018
16:55:38

Stas
03.04.2018
16:55:53
точно нет, братан, один айтем падает, вот так точнее:
_.each(marketItems, function(obj, index, list) {
const newItem = new Item(obj);
Item.save(newItem, function(err, item) {
game.items.push(item);
game.save(callback);
});
}
Это я по скрину предположил, ты скинул первых 3 значения, глянь что у тебя там дальше, если последовательность как я описывал, то ты пушишь весь массив. На больше моих знаний не хватает)