
Morsik
19.01.2018
13:47:05
убери колбек и заюзай промисы как в доках

Sunlive
19.01.2018
13:47:23
вот тоже самое на экспрессе
router.post('/signup', (req, res) => {
bcrypt.hash(req.body.password, 10, (err, hash) => {
User.find({ email: req.body.email })
.exec()
.then(user => {
if (user.length >= 1) {
return res.status(409).json({
message: 'Mail already used',
});
}
if (err) {
return res.status(500).json({
error: err,
});
}
const USER = new User({
_id: new mongoose.Types.ObjectId(),
email: req.body.email,
password: hash,
});
USER.save()
.then(result => {
res.status(201).json({
message: 'User Created!',
user: result,
});
})
.catch(error =>
res.status(500).json({
error,
}),
);
});
});
});
и оно работает

Morsik
19.01.2018
13:47:49
а еще return перед USER.save

Sunlive
19.01.2018
13:47:59
да ставил

Google

Sunlive
19.01.2018
13:48:02
но все равно не але

Morsik
19.01.2018
13:48:14

Sunlive
19.01.2018
13:48:52

Morsik
19.01.2018
13:49:23
(ты просто пытался await на штуку которая по факту ничего не возвращает навесить)

Nurik
19.01.2018
13:49:36
Привет. Подскажите пожалуйста, начал сегодня учить коа, пишу рест апи, но мне почему то приходит 204 пустой респонс. Где я накосячил? в упор не вижу уже
export const createUser = async ctx => {
ctx.body = await bcrypt.hash(ctx.request.body.password, 10, (err, hash) =>
User.find({ email: ctx.request.body.email })
.exec()
.then(user => {
if (user.length >= 1) {
ctx.throw(409, 'Mail already used');
}
if (err) {
ctx.throw(500, err);
}
const USER = new User({
_id: new mongoose.Types.ObjectId(),
email: ctx.request.body.email,
password: hash,
});
USER.save().then(result => ({ message: 'User created!', user: result }));
})
.catch(er => ({
message: 'hello world',
err: er,
})),
);
};
Я вот не понимаю почему ты не юзаешь async/await если у тебя функция объявлена асинхронной ?
Перепиши в синхронном стиле, может, найдешь причину.

Sunlive
19.01.2018
13:51:14

Nurik
19.01.2018
13:52:14
В любом случае, дебаг тебе в руки.

Sunlive
19.01.2018
13:54:15
единственное скажите, ctx.throw() норм юзать?

Nurik
19.01.2018
13:55:34
throw new Error

Sunlive
19.01.2018
13:56:00
а ок, оно и так внутри трайкетча

Nurik
19.01.2018
13:56:38

Google

Sunlive
19.01.2018
13:56:57
ща
try {
ctx.body = await bcrypt
.hash(ctx.request.body.password, 10)
.then(hash => {
const USER = new User({
_id: new mongoose.Types.ObjectId(),
email: ctx.request.body.email,
password: hash,
});
return USER.save();
})
.then(result => ({ message: 'User created!', user: result }))
.catch(err => {
ctx.throw(500, err)
});
} catch (error) {
ctx.body = error;
}

Morsik
19.01.2018
14:00:20
не смешивай так промисы и await

Sunlive
19.01.2018
14:00:41
да я ща перепишу еще разок
на эвэйты уже
так, версия 3
try {
const hash = await bcrypt.hash(ctx.request.body.password, 10);
const USER = new User({
_id: new mongoose.Types.ObjectId(),
email: ctx.request.body.email,
password: hash,
});
const result = await USER.save();
ctx.body = {
message: 'User Created!',
user: result,
};
} catch (error) {
ctx.body = error;
}
работает вроде))
всем спасибо, парни

Anton
19.01.2018
14:05:49
Всем привет, такой вопрос, Content-type вообще можно как-то кастомно уставноить допустим только на application/json?
А то у меня получается такой прикол после пост запроса, что request content type application/json, а response text/html из-за чего у меня Failed to lookup view "error" in views directory "/src/views"(типо он пытается срендерить какую-то страницу и не может ее найти)


Nurik
19.01.2018
14:07:47
try {
const hash = await bcrypt.hash(ctx.request.body.password, 10);
const USER = new User({
_id: new mongoose.Types.ObjectId(),
email: ctx.request.body.email,
password: hash,
});
const result = await USER.save();
ctx.body = {
message: 'User Created!',
user: result,
};
} catch (error) {
ctx.body = error;
}
Вот тебе с сипользованием async/await. Начинай сразу с ним, не тяни.
function hash(pass,length){
return new Promise((resolve, reject) => {
bcrypt.hash(pass, length,(err, hash) => {
if(err){return reject(err);}
resolve(hash);
});
});
}
export const createUser = async (ctx,next) => {
try{
let hashedPassword = await hash(ctx.request.body.password,10);
let user = await User.find({ email: ctx.request.body.email });
if (user.length >= 1) {
return ctx.throw(409, 'Mail already used');
}
const USER = new User({
_id: new mongoose.Types.ObjectId(),
email: ctx.request.body.email,
password: hash,
});
let savedUser = await USER.save();
ctx.body = { message: 'User created!', user: savedUser };
} catch(err){
throw err;
}
};


Eugeny
19.01.2018
14:14:42
всем привет, после установки модулей mongodb и mongoose, условно говоря, создал юзера, засейвил его, в консольке вижу, что он создался, все ок. Такой вопрос, где эти данные хранятся?В какой дирректории?

Morsik
19.01.2018
14:15:59
Вот тебе с сипользованием async/await. Начинай сразу с ним, не тяни.
function hash(pass,length){
return new Promise((resolve, reject) => {
bcrypt.hash(pass, length,(err, hash) => {
if(err){return reject(err);}
resolve(hash);
});
});
}
export const createUser = async (ctx,next) => {
try{
let hashedPassword = await hash(ctx.request.body.password,10);
let user = await User.find({ email: ctx.request.body.email });
if (user.length >= 1) {
return ctx.throw(409, 'Mail already used');
}
const USER = new User({
_id: new mongoose.Types.ObjectId(),
email: ctx.request.body.email,
password: hash,
});
let savedUser = await USER.save();
ctx.body = { message: 'User created!', user: savedUser };
} catch(err){
throw err;
}
};
bcrypt имеет промисное апи

Nurik
19.01.2018
14:17:02

Morsik
19.01.2018
14:17:11
ок

Sunlive
19.01.2018
14:17:14
Вот тебе с сипользованием async/await. Начинай сразу с ним, не тяни.
function hash(pass,length){
return new Promise((resolve, reject) => {
bcrypt.hash(pass, length,(err, hash) => {
if(err){return reject(err);}
resolve(hash);
});
});
}
export const createUser = async (ctx,next) => {
try{
let hashedPassword = await hash(ctx.request.body.password,10);
let user = await User.find({ email: ctx.request.body.email });
if (user.length >= 1) {
return ctx.throw(409, 'Mail already used');
}
const USER = new User({
_id: new mongoose.Types.ObjectId(),
email: ctx.request.body.email,
password: hash,
});
let savedUser = await USER.save();
ctx.body = { message: 'User created!', user: savedUser };
} catch(err){
throw err;
}
};
?? в итоге у нас очень похоже вышло, я выше кинул уже

Morsik
19.01.2018
14:18:00

Sunlive
19.01.2018
14:18:19

Nurik
19.01.2018
14:18:25

Sunlive
19.01.2018
14:18:30
просто выбрасывать?

Google

Morsik
19.01.2018
14:19:45
<logging error>
return ctx.throw(500)
а
лучше бросить, окей

Nurik
19.01.2018
14:20:45
просто выбрасывать?
По хорошему, нужно создавать свои ошибки отнаслеодванные от Error. И уже их прокидывать, учитывая environment. С X-Request-Id чтобы легче было дебажить в дальнейшем.

Sunlive
19.01.2018
14:21:58

Kolya
19.01.2018
14:23:42

Cenator
19.01.2018
14:24:03
bowser попробуй
хотя хз причем он тут
но устройство определить непросто

Evgeny
19.01.2018
14:24:44

Cenator
19.01.2018
14:24:45
максимум браузер и версию оси

Kolya
19.01.2018
14:25:07

Nurik
19.01.2018
14:25:19
Главный вопрос — зачем ?

Kolya
19.01.2018
14:25:21
тоже вижу что больше чем ОС не получается вытянуть

Nurik
19.01.2018
14:25:50
аналитика
Можно чекать связку UserAgent и разрешение экрана.

Kolya
19.01.2018
14:26:09
на беке, вижу, никак
надо сомтреть фронт ((

Cenator
19.01.2018
14:26:26

Google

Kolya
19.01.2018
14:26:41

?
19.01.2018
14:39:26

Alexander
19.01.2018
14:51:43
привет
кто-нибудь работал через ноду с ravendb?

Mishell
19.01.2018
16:43:54
Кто-то сталкивался с google play music? Можно ли как-то выкачать музыку из этого сервиса непосредственно кодом?
Существует метод, сохранить треки на телефон что бы слушать онлайн, а потом с телефона используя этот трек и базу данных - декодировать музыку, что бы получить готовый mp3.
Но есть ли ещё способы? Может можно как-то слить музыкальный поток прямо со страницы пока музыка играет? Или есть предположения?

Тимофей
19.01.2018
16:56:35

Admin
ERROR: S client not available

Mishell
19.01.2018
16:57:14
Хотел бы получить доступ к гугл музыке, конечно.

Тимофей
19.01.2018
16:58:44

Mishell
19.01.2018
17:00:10
Отсутствует. Точнее, апи есть, но музыку скачивать оно не позволяет. Как я уже сказал, есть окольный метод и можно дешифровать музыку, которая скачивается приложением. Изначально на телефоне она зашифрована. Но меня интересует, может быть подскажут ещё варианты.

Kolya
19.01.2018
17:03:04

Vitaliy
19.01.2018
17:47:25
уверен, можно при загруженной веб-версии, вытягивать через нее файлы. возможно, придется клеить чанки, загруженные с сервера, подменять audio api или еще что-то такое
главное — запустить свой js-код внутри страницы

Dimanius851
19.01.2018
18:32:06

Mishell
19.01.2018
18:53:05

Gleb
19.01.2018
20:09:17
Ребята, почему код с 1 скрина работает? И что это за обьект со 2 скрина?

Kolya
19.01.2018
20:10:44
Контекст this?

Gleb
19.01.2018
20:10:50
да
Контекст this?
и уж простите, но что значит эта запись? { [Function: foo] delay: [Function] }?
Если перевести....

Google

Gleb
19.01.2018
20:14:55

Kolya
19.01.2018
20:16:04
Погугли, это элементарно

Gleb
19.01.2018
20:25:43
Спасибо Док.
Я бы не спрашивал до того как погуглил.
Я понимаю, что this ссылается на 'обьект перед точкой'. И понятно, что функции в конечном итоге наследуются от Object но этот вызов мне не ясен.
Ведь если мы вызовем this внутри какой-то функции, то this будет икать именно Object чтоб привязаться к нему. А тут this привязывается к функции..
при этом не понятно что это такое? { [Function: foo] delay: [Function] }...

Vitaliy
19.01.2018
20:34:14

Evgeny
19.01.2018
20:35:13
Я бы даже рекомендовал почитать какую нибудь книгу по ес6

Gleb
19.01.2018
20:35:30

Evgeny
19.01.2018
20:35:31
Потому что дальше начнутся вопросы сложнее,а понимание не увеличится

Vitaliy
19.01.2018
20:35:57
ну потомучто ти записал ей как обьекту поле delay
потому и обьект

Evgeny
19.01.2018
20:36:03
А услышав сейчас ответ вы его банально не поймёте

Gleb
19.01.2018
20:37:50

Vitaliy
19.01.2018
20:38:10
ну как-бы функция это и есть обьект

Evgeny
19.01.2018
20:38:25
Ну почему люди так не любят читать и разбираться? :(

dima
19.01.2018
20:38:37

Vitaliy
19.01.2018
20:38:50
как-бы она и до того была обьектом

dima
19.01.2018
20:39:05
просто смотря как вызывать ф-ю. И она будет ссылаться на новый абсолютно обьект