Vadim
22.10.2018
12:06:32
Еще буду разбираться в чем причина. fs.clonefile - ведет себя как то странно?
Sergey
22.10.2018
12:41:09
Привет! Не подскажете как посмотреть текст HTTP Requesta который делаю через стандартный http модуль, http.request
Егор
22.10.2018
15:01:02
на самом объекте
Google
Егор
22.10.2018
15:02:14
Или там где-то написанно в API, но я не увидел?
http://mongodb.github.io/node-mongodb-native/3.1/api/ObjectID.html#getTimestamp
Александр
22.10.2018
15:03:27
Alexey
22.10.2018
15:04:52
кстати про id. Внутри метода модели как обратиться коротко к ее id?
Went
22.10.2018
15:05:27
Alexey
22.10.2018
15:05:41
this._id ?
вижу..
Cenator
22.10.2018
15:07:08
еще раз и бан во всех чатах
Alexey
22.10.2018
15:07:13
а как лучше создать новую модель и в ней ref на текущую или внутри текущей вложенный массив? в чем принципиальная разница?
Егор
22.10.2018
15:09:28
Alexey
22.10.2018
15:09:51
вообще хорошо ли по аналогии с реляционными БД нормализацию делать и выносить многое в отдельные таблички со связкой по id?
Александр
22.10.2018
15:10:06
Не хорошо
Егор
22.10.2018
15:10:23
Странно ещё то, что оно определяет мою временную зону
Google
Егор
22.10.2018
15:11:24
Обычно в timestamps добавляется просто UTC
Alexey
22.10.2018
15:11:26
Не хорошо
те это только в том случае если в другой модели реально что то другое... ну скажем продукты и заказы это две разные модели. а вот скажем продукты и какую то дополнительную инфу по ним лучше не делать 2 модели?
Александр
22.10.2018
15:11:43
Егор
22.10.2018
15:11:43
а тут GMT+<INT>
Alexey
22.10.2018
15:11:45
пример чисто первое что пришло на ум
Да
ну а скажем токен для востановления
пароля. хорошо прямо в User
или в отдельную модель ResetPassTokens
Aleksey
22.10.2018
15:13:26
Коллеги, привет! Был ли у кого опыт работы с голосовыми технологиями (Web Speech API, Speechkit) ? Интересуют пратические кейсы по взаимодействию с интерфейсами речью
Александр
22.10.2018
15:13:36
Alexey
22.10.2018
15:14:15
Прямо в
а еще токен активации юзера еще признак его блокировки и все это в монге норм в одной таблице
Александр
22.10.2018
15:14:24
Alexey
22.10.2018
15:14:38
и модели
а не в нескольких
Александр
22.10.2018
15:14:58
Да
Alexey
22.10.2018
15:15:19
ok. значит можно широкую коллекцию
пасибо
Went
22.10.2018
15:45:43
Alexey
22.10.2018
15:46:50
Google
Alexey
22.10.2018
15:47:02
да в общем то текстовые данные много места не занимают..
Went
22.10.2018
15:47:06
Alexey
22.10.2018
15:47:24
я более с точки зрения как логичнее и правильнее делать структуру..
Went
22.10.2018
15:49:48
типа почти как доменная модель
всё, что к одной сущности — в одной коллекции
— пользователь с настройками — db.user
— сайт со страницами — db.site, и т.п.
+ не забываем, что в .methods можно много чего остального
у нас, например, mongoose — это вообще ВСЕ данные, в т.ч. интерфейсы сторонних API и FS
а так же, что есть ещё .virtual и .discriminator
и вот в последнем реализуется паттерн STI
Single Table Inheritance - Wikipedia
https://en.wikipedia.org/wiki/Single_Table_Inheritance
в общем, полноценная перегрузка методов, свойств и всего остального в рамках одной записи при кастовании разных .discriminatorValue
Alexey
22.10.2018
15:52:31
типа почти как доменная модель
всё, что к одной сущности — в одной коллекции
— пользователь с настройками — db.user
— сайт со страницами — db.site, и т.п.
+ не забываем, что в .methods можно много чего остального
у нас, например, mongoose — это вообще ВСЕ данные, в т.ч. интерфейсы сторонних API и FS
а так же, что есть ещё .virtual и .discriminator
и вот в последнем реализуется паттерн STI
Single Table Inheritance - Wikipedia
https://en.wikipedia.org/wiki/Single_Table_Inheritance
в общем, полноценная перегрузка методов, свойств и всего остального в рамках одной записи при кастовании разных .discriminatorValue
const UserSchema = mongoose.Schema(
{
name: { type: String, required: true, index: true },
email: { type: String, required: true, index: true, unique: true },
password: { type: String, required: true },
resetPassordTokens: [
{
verification: {
type: String
},
createdAt: {
type: Date
},
deleted: Boolean
}
],
activationTokens: [
{
verification: {
type: String
},
createdAt: {
type: Date
},
deleted: Boolean
}
]
},
{
versionKey: false,
timestamps: true
}
)
типа того? Пример пока весьма условный... например deleted у токенов наверное зря..
Went
22.10.2018
15:53:30
все вложенные коллекции желательно реализовывать через
Mongoose v5.3.4: SubDocuments
https://mongoosejs.com/docs/subdocs.html
так будет меньше проблем с Валидацией
Erving
22.10.2018
15:56:03
не совсем но ноде вопрос, не бейте, просто проблема не гуглится, а тут, может, кто-то сталкивался
Went
22.10.2018
15:56:26
const UserSchema = mongoose.Schema(
{
name: { type: String, required: true, index: true },
email: { type: String, required: true, index: true, unique: true },
password: { type: String, required: true },
resetPassordTokens: [
{
verification: {
type: String
},
createdAt: {
type: Date
},
deleted: Boolean
}
],
activationTokens: [
{
verification: {
type: String
},
createdAt: {
type: Date
},
deleted: Boolean
}
]
},
{
versionKey: false,
timestamps: true
}
)
const resetPasswordsSchema = new Schema({
verification: {
type: String
},
createdAt: {
type: Date
},
deleted: Boolean
});
const activationTokensSchema = new Schema({
verification: {
type: String
},
createdAt: {
type: Date
},
deleted: Boolean
});
{
name: { type: String, required: true, index: true },
email: { type: String, required: true, index: true, unique: true },
password: { type: String, required: true },
resetPassordTokens: [resetPasswordsSchema],
activationTokens: [activationTokensSchema]
},
{
versionKey: false,
timestamps: true
}
Erving
22.10.2018
15:57:31
есть vps в облаке mail.ru, у неё есть ip. машина не видит свой ip, ip addr show это потверждает. как такое возможно, почему?
Alexey
22.10.2018
15:58:29
const resetPasswordsSchema = new Schema({
verification: {
type: String
},
createdAt: {
type: Date
},
deleted: Boolean
});
const activationTokensSchema = new Schema({
verification: {
type: String
},
createdAt: {
type: Date
},
deleted: Boolean
});
{
name: { type: String, required: true, index: true },
email: { type: String, required: true, index: true, unique: true },
password: { type: String, required: true },
resetPassordTokens: [resetPasswordsSchema],
activationTokens: [activationTokensSchema]
},
{
versionKey: false,
timestamps: true
}
const ResetPasswordSchema = mongoose.Schema(
{
verification: {
type: String
},
deleted: Boolean
},
{
versionKey: false,
timestamps: true
}
)
const UserSchema = mongoose.Schema(
{
name: { type: String, required: true, index: true },
email: { type: String, required: true, index: true, unique: true },
password: { type: String, required: true },
resetPassordTokens: [ResetPasswordSchema]
},
{
versionKey: false,
timestamps: true
}
)
const resetPasswordsSchema = new Schema({
verification: {
type: String
},
createdAt: {
type: Date
},
deleted: Boolean
});
const activationTokensSchema = new Schema({
verification: {
type: String
},
createdAt: {
type: Date
},
deleted: Boolean
});
{
name: { type: String, required: true, index: true },
email: { type: String, required: true, index: true, unique: true },
password: { type: String, required: true },
resetPassordTokens: [resetPasswordsSchema],
activationTokens: [activationTokensSchema]
},
{
versionKey: false,
timestamps: true
}
ага спасибо.. вот как раз не сговариваясь типа того написал..
Went
22.10.2018
15:59:27
:)
Alexey
22.10.2018
15:59:48
const resetPasswordsSchema = new Schema({
verification: {
type: String
},
createdAt: {
type: Date
},
deleted: Boolean
});
const activationTokensSchema = new Schema({
verification: {
type: String
},
createdAt: {
type: Date
},
deleted: Boolean
});
{
name: { type: String, required: true, index: true },
email: { type: String, required: true, index: true, unique: true },
password: { type: String, required: true },
resetPassordTokens: [resetPasswordsSchema],
activationTokens: [activationTokensSchema]
},
{
versionKey: false,
timestamps: true
}
а про индексы не подскажете? Нужно ли для продакшна отключать в Mongoose их создание?
Went
22.10.2018
16:00:09
Для продакшена обязательно что-то типа
autoIndex : config.AutoIndex
т.е., чтобы в конфиге прода было выключено
просто представьте, что на 1М коллекцию нужно будет поле с index:true под нагрузкой "вылить"
Alexey
22.10.2018
16:00:10
ну те такая схема как написали она же при запуске приложения генерит индексы..
config.AutoIndex который false if NODE_ENV == prod
Went
22.10.2018
16:01:46
Google
Alexey
22.10.2018
16:01:56
или миграции.. а без них хотелось обойтись..
Went
22.10.2018
16:02:59
придется помнить какие...
эмм...
мы все фичи реализуем через enabled~disabled конфиг
т.е.
1. сначала катятся изменения кода
2. потом делаются нужные индекы
3. только теперь "включается" функционал опцией конфига
это "упрощённо" но так и есть
Alexey
22.10.2018
16:03:43
можно так можно иначе..
мне кажется для начала нужно куда то запомнить индексы да и все..
скрипт типа createIndexes.js а в нем все индексы, был бы норм?
Went
22.10.2018
16:04:51
или миграции.. а без них хотелось обойтись..
смотрите .discriminator
https://mongoosejs.com/docs/discriminators.html
ставите разные версии,
все новые документы получают свежий код
старые по мере "использования" "дотягиваются" до последнего кода по полям и т.п. :)
есть .pre('init' хук ещё
через него можно конструировать что-то сложное
эмм.. и как бы вообще, на мой вкус можно заложиться, заранее создав пару полей с названием customData в которых mixed контент, чтобы потом не было проблем при влетающих Change Reaquest, хотя это "вкусовщина" (просто не совсем удобно когда в robo3t документы на "верхнем уровне" полей по разному выглядят)
roma
22.10.2018
16:09:30
стоит читать Beginning Node.js если я немного знаком с основами js?
Phoenix»
22.10.2018
16:09:34
подскажите
как можно с буфером работать
например есть
let a = new Buffer.alloc(2);
как можно инкреминитровать a => 0001 и тд?
Alexey
22.10.2018
16:18:32
типа почти как доменная модель
всё, что к одной сущности — в одной коллекции
— пользователь с настройками — db.user
— сайт со страницами — db.site, и т.п.
+ не забываем, что в .methods можно много чего остального
у нас, например, mongoose — это вообще ВСЕ данные, в т.ч. интерфейсы сторонних API и FS
а так же, что есть ещё .virtual и .discriminator
и вот в последнем реализуется паттерн STI
Single Table Inheritance - Wikipedia
https://en.wikipedia.org/wiki/Single_Table_Inheritance
в общем, полноценная перегрузка методов, свойств и всего остального в рамках одной записи при кастовании разных .discriminatorValue
пока не забыл... А такие вещи как скажем UserLoginHistory где все его заходы, конечно в отдельную коллекцию. А обоснование? тк таких заходов может быть очень много?
Went
22.10.2018
16:19:01
Alexey
22.10.2018
16:20:40
Went
22.10.2018
16:21:52
Alexey
22.10.2018
16:22:08
Went
22.10.2018
16:22:16
если нужны, я бы клал в user
Alexey
22.10.2018
16:22:17
взяв какой нибудь deviceDetect
Google
Alexey
22.10.2018
16:22:26
а каких нибудь UserPlaylists если такой нужен сайту UsersLikes те что он ставил? а не его объектам..
тоже ведь можно вложенной коллекцией..
ну это уж совсем просто для понимания.. реально делать пока буду напоминалки пароля и LoginHistory
Nurlan
22.10.2018
16:30:07
Добрый вечер, как лучше реализовать админа через PassportJS, я реализовал регистрацию и аутентификацию, пользователи видят только свои записи, а вот как реализовать админа чтобы он видел все записи? Написать еще один файл роутов где указанов если user == admin (указать явно пользователя или его id) то делать get post на все записи в БД?
Went
22.10.2018
16:31:26
Nurlan
22.10.2018
16:34:02
Aga
22.10.2018
16:36:48
Если админ - давать соответсвующий контент, если нет слать нах
Sergey
22.10.2018
16:40:23
Went
22.10.2018
16:42:37
например express-acl - npm
https://www.npmjs.com/package/express-acl
Nurlan
22.10.2018
16:45:13
Went
22.10.2018
16:46:09
Спасибо большое
да не за что
там много подобного, пошукай что поинтересней/попроще/побогаче, по потребностям
Павел
22.10.2018
16:46:14
привет. заливаю на heroku. В procfile возможно что-нибудь на подобии этого запихнуть:
web: cd client && npm run build && cd ../server npm run prod?