Ivan
Willy
Sir, это же реклама ноды, да? =(
Николаич
Камиль
ребят подскажите, мне нужно на сервак грузить картинку и нужно сделать проверку на то что это не исполняемый файл, а именно картинка
Камиль
как это провернуть
Den
Попробуй библиотекой по работе с картинками открыть этот файл
Камиль
типо имеджМаджика?
Den
В ноде с картинками не работал, но в ПХП есть функция, которой открываешь файл, а потом получаешь инфу о картинке, типа расширение, размер фото и т.д. В случае, когда грузишь не картинку, он кидает ошибку
Камиль
еще вопрос в статьях на тему загрузки изображений с формы везде либа formidable
Den
Либо читать стандарты и самому писать функцию, которая будет читать заголовки файла и решать, картинка это или нет
Камиль
зачем ее юзают?
Den
Полагаю, что она удобна, когда надо получать тело типа multipart form data
Камиль
ну то есть без нее я тоже смогу спокойно получить файл
Камиль
еще вопрос, где можно посмотреть размер npm пакета
Den
Сможешь, если воспользуешься другой библиотекой. Сам nodejs не парсит запрос из браузера, это делают различные библиотеки. Для express это обычно body-parser
Камиль
спасибо
Камиль
почему то в статьях юзают и бодипарсер и формидабл
Камиль
нашел на стаке что бодипарсер обрабатывает только json
Дима
Ребят подскажите пж-та как можно улучшить связи в mongoose.
Дима
Есть маршрут для отрисовки 1 статьи + все ее комментарии
Дима
Вот так это выглядит в express router
Дима
// Get post by id
router.get('/:postId', (req, res, next) => {
mongoose.connect(url);
var Post = mongoose.model("Post", postScheme);
var id = req.params.postId;
Post.findById(id, function(err, doc) {
var Comment = mongoose.model("Comment", commentScheme);
Comment.find({post_id: id}, function(err, coma) {
mongoose.disconnect();
res.render('post/show', {
title: doc.title,
post: doc,
comments: coma,
});
});
});
});
Дима
Получается что я вызываю модель Comment внутри функции Post.find...
Дима
Может есть более элегантный способ, как можно отрисовать все комментарии к статье
Дима
В модели Comment в качестве внешнего ключа указан post_id с uuid найденого поста
Pavel
Так эти запросы можно паралельно делать
Pavel
Используйте промисы и будет красиво
Дима
Дима
И еще вопрос.
Дима
Вот я построил запрос с .then:
Дима
User.find({}).then( data => {
res.render('user/index', {title: "Users", users: data});
});
Дима
Мне нужно вынести из функции, запрос на ренедр шаблона
Дима
Но из-за локального окружения функции доступ к данным нет
Дима
Хочется так
Дима
User.find({}).then( data => {
// тут будет запись данных во внеш. переменную
}); res.render('user/index', {title: "Users", users: data});
Vitaly
async/await
Alexey
Alexey
https://learn.javascript.ru/promise
Дима
Дима
router.get('/', function(req, res, next) {
mongoose.connect(url);
var User = mongoose.model("User", userScheme);
var users = User.find({})
.then(data => data)
.catch(err => err);
res.render('user/index', {title: "Users", users: users});
});
Дима
На отсутствие переменной users, обработчик не ругается. Однако никаких данных нет
Vitaliy
они есть просто ты не ждеш пока их достанешь
Evgeny
Vitaliy
ти сразу отправляешь undefined у рендер
Vitaliy
или через await сделай
Дима
Камиль
ребят подскажите бодипарсер-экспреса не может файлы парсить же
Anatoliy
Vitaliy
файлы что сервер шлет?
Камиль
не если с фронта нужно отправлять файл на сервак
Камиль
нужно мультипарт форм дату использовать
Камиль
а бодипарсер не может в нее же
Vitaliy
есть multer
Камиль
Дима
Дима
Есть какой-нибудь способ чтобы все таки пробросить данные на внешний уровень?
Evgeny
пока еще не знаю.
ну просто ты привел пример на промисах, я тебе предложил решение на промисах=)
Vitaliy
async/await
Дима
router.get('/', function(req, res, next) {
mongoose.connect(url);
var User = mongoose.model("User", userScheme);
var users = User.find({})
.then(data => data)
.catch(err => err);
res.render('user/index', {title: "Users", users: users});
});
Дима
Мне надо чтобы переменная users отдавала данные из then
Vitaliy
ставишь await на Users.find; и все
Дима
и чтобы в шаблоне res.render уже поступали данные а не пустота как сейчас
Алексей
Cenator 🐈
Vitaliy
Vitaliy
обяз должнен быть await
arts
Алексей
res.render выполняется не в then > перед User.fin...
Вам нужно ознакомиться с промисами
Дима
что за ошибка?
router.get('/', function(req, res, next) {
mongoose.connect(url);
var User = mongoose.model("User", userScheme);
var users = await User.find({})
.then(data => data)
.catch(err => err);
res.render('user/index', {title: "Users", users: users});
});
Дима
.then(data => await data)
^^^^^
SyntaxError: missing ) after argument list
Алексей
не так
arts
Vitaliy
http://thecodebarbarian.com/using-async-await-with-mocha-express-and-mongoose
Алексей
router.get('/', async function(req, res, next) {
...
try{
var users = await User.find({})
}
catch{}