LINUX.ORG.RU

отговорите: (nodejs) vue.js + express + pg-promise + postgresql + docker

 ,


0

2

Хочу сделать небольшое и легконагруженное приложение - редактор словарей терминов. Есть список слов, можно искать слово. У слова есть карточка, которая своя для каждого пользователя, но можно смотреть чужие карточки. Карточка в формате markdown или что-то около того.

Клиента буду делать на vue.js, а сервер хочу на node.js . Да, меня уже отговаривали использовать node.js на стороне сервера. Но вдруг для такого простого проекта прокатит? В принципе, я готов всю тяжесть написать на pl/pgSQL, а на нодке - только тончайший интерфейс и собственно веб сервер. Соответственно, вопрос - как там с утечками памяти и прочими такими вот ужасами?

Т.е. вопрос состоит не в удобстве и не в производительности, а в качестве с т.з. надёжности.

Перемещено tailgunner из development

★★★★★

Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от PolarFox

Вескость оснований зачастую сводится к личным предпочтениям. А потом под это дело подгоняют теорию о превосходстве одного языка над другим :).

В случае жыэс единственный реальный довод - не надо мозг переключать, когда много пишешь и для сервера и для клиента. Но важность этого довода тоже основана на личных предпочтениях.

Если тебе станут расказывать про изоморфный код - скорее всего это херня.

Vit ★★★★★
()

отговорите:

Ну, я бы такое сделал на чистом PHP за 3-5 часов. Отдельные папки для DOCROOT и приложения, простенький фронт контроллер с ленивым вызовом через фабричные методы нужных моделей, ни какого dependecy injection - простенькая функция в spl_autoload_register для разгадывания файла по названию класса, view модель с вспомогательными функциями, роутинг из конфига, свой контроллер на каждую страницу, при создании получающий инстанс фронт контроллера, шаблоны отображения на PHP, код в моделях, повторная функциональность в контроллерах - через наследование, порядок и иерархия - через namespace и директории, база - MySQL (через PDO библиотеку) с параметрическими запросами, закрытыми в нужной модели/моделях. Думаю, 20-30 КБ кода хватило бы на всё про всё. И совместимость была бы от PHP 5.3 до PHP 7.2, и ставь хоть куда, и просто настолько, что даже пьяный новичок за 10 минут разберётся, что к чему. Ну, ещё можно простенький Vagrantfile написать для DEV окружения, а к нему файлы с схемой базы данных и начальными тестовыми данными. Зачем усложнять какими то «vue.js + node.js + pg-promise + postgresql + docker» и прочими...

anonymous
()
Ответ на: комментарий от Int0l

Это никто не оспаривает, просто я не возмусь сейчас осуждать «echo <tr><td>»

den73 ★★★★★
() автор топика
Ответ на: комментарий от deep-purple

когда сикель уже не справляется

Когда-то давно читал про адовый хак к MySQL: заливка таблиц строками без SQL, но с поддержкой консистентности. Странно, почему не пошло.

Shadow ★★★★★
()
Ответ на: комментарий от Shadow

Да он, по-моему, не адовый - bulk copy есть вроде и в других серверах, правда, я лично не помню, чтобы приходилось пользоваться - и так как-то хватало.

den73 ★★★★★
() автор топика

А вот это, интересно, что означает? http://linuxbsdos.com/2017/06/26/how-to-install-node-js-lts-on-debian-9-stretch/

«Here’s what the Release Notes have to say about Node.js on Debian 9:

The Node.js platform is built on top of libv8-3.14, which experiences a high volume of security issues, but there are currently no volunteers within the project or the security team sufficiently interested and willing to spend the large amount of time required to stem those incoming issues.»

Какой Project они имеют в виду? Сама нода не заботится о своих дырах, или debian не хочет постоянно выпускать к ним заплатки?

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Ставить платформы или языки программирования через репозитарий дистрибутива не лучшая идея. Там часто все очень старое.

Я каждый раз когда выходит новая версия питона собираю ее на ноуте. Проблем особых нет. Нода собирается ооочень долго из-за V8. Поэтому каждый раз при выходе новой версии скачиваю архив с линуксовым билдом, распаковываю и прописываю пути в PATH. Скрипт это делает за 5 сек. В ноде и V8 дырки находят постоянно, поэтому рекомендую обновлять версию как можно чаще.

abc
()
Ответ на: комментарий от den73

Нет, там без лока таблиц и с драйверами.

Shadow ★★★★★
()
Ответ на: комментарий от abc

Ну вы с адекватным челом меня чуть не доломали. Очень многие говорят, что хайп по нодке прошёл и она в бекенд, вообще говоря, не пробилась. Т.е. да, наверняка многие сумели её одолеть, но настроение масс я уже понял - оно склоняется не в пользу применения ноды на бекенде.

И я смотрю, что по топовым зарплатам PHP даже лучше, чем нодка.

Но всё равно, этот проект будет сделан на ноде и pl/pgSQL :) А там посмотрим.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от den73

Востребованность SQL на рынке труда на порядок больше, чем востребованность mongodb

как там в девяностых?))))

anonymous
()
Ответ на: комментарий от den73

Ну вы с адекватным челом меня чуть не доломали.

Это к тому что инструменты надо подбирать соответствующие.

На счет хайпа по ноде. Хайп сам по себе ничего не значит. Я знаю крупную европейскую телеком компанию в которой ВЕСЬ! бэкэнд на nodejs. Хотят ли они переходить на что-то другое ? Нет. Держат ли они большие нагрузки ? Да. Весь бэкэнд у них организован микросервисами, и все окей с небольшими оговорками. Поддерживать микросервисную архитектуру в разы сложнее чем монолит. Но это другая история. У них все работает и ладно.

Таких компаний на моей памяти около 4 штук. Я не призываю использовать ноду. Просто для каждой задачи свой инструмент. Универсальных языков и технологий нет. Условный гвоздь можно забыть молотком и микроскопом. Задача будет выполнена, но с какими затратами / потерями.

Я понимаю, вас сложно выбрать язык / технологию, сейчас столько много всего. Расскажу свой подход. Когда перед нашей командой стоит задача, то мы для начала анализируем на каком стеке ее быстрее всего сделать. Смотрим как это будет на ноде, python, golang и java. Т.е. мы подбираем подойдет ли та или иная экосистема под нашу задачу.

Например, нужно написать несложного бота под телеграм или фейсбук ? Берем ноду. Если бот довольно сложный и есть много взаимодействий, мы свой выбор остановим на питоне.

Часто бывает задача проверить гипотезу. Т.е. это быстро быстро (2-3 дня) накатать прототип пофигу на чем и проверить работает или нет. Велика вероятность что этот код будет выброшен после теста. Поэтому выбор стека имеет большое значение.

abc
()
Ответ на: комментарий от abc

Таких компаний на моей памяти около 4 штук.

Ну и славненько!

А вообще - я всё равно не смогу освоить одновременно питон, PHP и golang. Нужно с чего-то начать. Я уже кое-что знаю про ноду, про npm, про вебпак, про js. Используя ноду в бекенде, я могу закреплять эти знания. Используя PHP, я буду их размывать, даже если PHP лучше подходит для конкретной задачи.

Вот, родил что-то. Даже понравилось: в ноду буквально недавно завезли async-await, причём он теперь в рекомендуемой версии 8.9.4.

Вот моя нетленка:

const pgp = require('pg-promise')();
const фс = require('fs');
const утил = require('util');
const Пароль = фс.readFileSync('/y/slovo/пароль.текст')
const СтрокаСоединения = утил.format('postgres://den:%s@localhost/slovo',Пароль);
(async () => {
    try {
      const Бд = await pgp(СтрокаСоединения);
        const Соед = await Бд.connect();
        try {
            const Слова = await Соед.any('select * from английское_слово');
            console.log(Слова);
            const Рез = await Соед.result("insert into английское_слово values (4,'procedure','процедура')"
                ,Рез => Рез.rowCount);
            console.log('Результат: ',Рез)
        } finally {
            Соед.done();
        }
    } catch(ш) {
        console.error(ш);
    }
})();
Т.е. не так уж это всё и страшно на вид получается (надеюсь, я сильно не налажал).

Есть, конечно, масса вопросов, например, как подключаться без пароля (не смог настроить postgres для этого, а может быть, pg-promise не умеет подключаться по локальным сокетам), как получить путь к текущему файлу скрипта и т.п.

И нет уверенности в правильности моего кода обработки ошибок, да и вообще. Ещё мне понравился Visual Studio Code. Он сразу заметил ноду и даже позволяет отлаживаться. Я бы сказал, впечатления пока лучше, чем от WebStorm, правда, тот был под офтопиком - может быть, поэтому сложнее конфигурировать было.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Ну, если ты ТАК будешь писать, то бери ноду. Всё будет хорошо. Хотя вот это бесит прям не могу как:

const Рез = await Соед.result(blah-blah-blah, Рез => Рез.rowCount);

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от Shadow

Ну, мне повезло, что теперь await в стабильной версии. Я так понял, и полугода не прошло ещё.

В том, что тебя бесит, я не знаю, что это после запятой. Скопипастил из примера, не приходя в сознание.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

То, что меня бесит, бесит не так, как это:

Скопипастил из примера, не приходя в сознание.

ИМХО, основная проблема javascript.

Shadow ★★★★★
()
Ответ на: комментарий от den73

Просто асинхронный метод, возвращающий результат, в качестве аргумента принимает результат. Я прнимаю, что все аминхолнно и по готовности... Но зачем логику-то ломать???!

Shadow ★★★★★
()
Ответ на: комментарий от den73

Браузер->вебсервер->postgress.
Я тягал инфу(json) с вебвервера с помощью axios.
Можно любой вебсервер на ноде. И если захочешь там post запросы делать, тогда надо будет еще к нему(веб серверу) модуль body-parser подгружать(или типа того), что-бы распарсить post запрос.

Int0l ★★
()
Последнее исправление: Int0l (всего исправлений: 3)
Ответ на: комментарий от Int0l

https://alligator.io/vuejs/basic-ssr/ - тут рекомендуют express использовать. Но у меня туманно отложилось, что express уже с чем-то пересекается, вышло из хайпа и вообще не торт.

den73 ★★★★★
() автор топика
Ответ на: комментарий от Int0l

Идея в целом ясна. Но сейчас же нельзя по-простому, надо всё через какие-то библиотеки. Вот я и пытаюсь из них тетрис сложить.

den73 ★★★★★
() автор топика
Ответ на: комментарий от Shadow

Этот параметр тут должен быть третьим, второй я просто проглядел. Третий параметр - это callback для трансформации полученного значения. В моём случае никакие параметры, кроме первого, вообще не нужны. То, что оно меня не обругало, конечно же, печально, но таков мир JS. Спасибо за твоё замечание.

den73 ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

Модернизирую свои умения :) Из знакомого мне и востребованного сегодня есть только MS SQL, да и то я не такой уж по нему спец и занимался им достаточно давно :)

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

Что бы делать запрос к бд и отдавать отдавать json. Подойдёт что угодно. Там кода на 10 срок

leprikon
()
Ответ на: комментарий от abc

Русскоязычность давай отнесём ко вкусовщине. В конце-то концов, имею ли я право в своей стране использовать на работе родной язык? Думаю, да.

С самим кодом что-нибудь плохо?

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Вспомнил про stateofjs - хороший индикатор хайповости. Но он показывает и реакцию, т.к. там есть галочка «я этим пользовался, но больше не хочу». Плохие технологии проявляются по отношению числа таких ответов к общему числу пользователей. Express там в пике и имеет хорошие отзывы, и, что немаловажно, находится в другой категории, чем vue, а значит, они не взаимоисключающи. Буду пока действовать по https://alligator.io/vuejs/basic-ssr/, меняю заголовок темы.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Ты вроде как создавал свои язык, думал ты нашел фатальные недостатки в тех что знал. А так да, если всё равно ничего знакомого - лучше начать с одного языка.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

В моём языке есть один фатальный недостаток - по нему 0 вакансий. А так-то, конечно, JS надо закопать. Но по нему вакансий много. Вот так вот. Услуги поесть медку не требуются, а услуги копаться в выгребной яме вполне востребованы. «ш» - это оШибка. Может быть, надо было «и» - исключение.

Всё, что тут русифицировано - это просто лёгкие эксперименты. Т.к. довольно сложно выработать хороший стиль, вот и балуюсь потихоньку.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

В конце-то концов, имею ли я право в своей стране использовать на работе родной язык? Думаю, да.

Хотя после этой фразы... Что ж, неистово желаю тебе когда-нибудь, получить на поддержку проект написанный с использованием китайских\японских иероглифов, арабского, иврита или utf8 смайликов в идентификаторах.

Наверно, это действительно весело.

anonymous
()
Ответ на: комментарий от ya-betmen

ну уж во всяком случае, не «о», т.к .оно непонятно, из кириллицы или из латиницы.

den73 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Ты в курсе о существовании 1С? Мне приходилось несколько строк для него писать. Представь себе, по-русски и для продакшена :)

А так вообще, уже давно имело смысл называть констрейнты в SQL по-русски. Тогда сразу, из самого сообщения об ошибке, конечному пользователю становится ясно, в чём проблема. И пользовался этим не только я :)

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от den73

пишет идентификаторы на кириллице

Молодец, хороший способ распугать всех заказчиков. Зато есть шанс прославиться на весь тырнет.

anonymous
()
Ответ на: комментарий от Shadow

Ну, если ты ТАК будешь писать, то бери ноду.

Да, похоже они нашли друг друга. Фарш из SQL и жаваскрипта, запеченный в одной большой асинхронной лепешке. Ах, вкусняшка! Матерые похапешники нервно курят в коридоре. Не хватает только «echo <tr><td>».

anonymous
()
Ответ на: комментарий от den73

имею ли я право в своей стране использовать на работе родной язык?

Не хочу глобализацию, хочу свое родное! Но внутреннего рынка нет, плак-плак, возьму буржуйские инструменты, буду писать для нерусей, а чо делать. Но кириллицу врагам не отдам, я же на своей земле! Как дитё, чесслово. Надеюсь, ты троллишь, а не в самом деле такой чебурашка.

anonymous
()
Ответ на: комментарий от den73

Никому этого решения не навязываю. И вообще, давайте кириллицу не обсуждать.

Как такое не обсуждать если это просто откровенная жесть. Такой код никакое code review не пройдет, более того с любой галеры тебя уволят скорее всего без объяснения причин. Потому что даже самые джуниоры себе такого не позволяют. Писать комментарии к коду на русском языке считается дурным тоном, а уж в самом коде это полный финиш. Если ты в этом не видишь проблемы, то у меня для тебя плохие новости.

abc
()
Ответ на: комментарий от abc

Ты сайт-то мой открывал? программирование-по-русски.рф . Если всерьёз хочешь это обсудить, лучше пиши на указанную там почту. Ессно, я не буду приучать работодателя, тем более иностранного, к русскому языку. Но пока я не на работе, а всего лишь на форуме, причём, заметь, на русскоязычном форуме :)

Меня другое волнует. При SSR данные из базы всё равно должны читаться из API клиентом, как я понял из статей. В моём случае получается, что и вправду PHP лучше. Поскольку он просто присылает готовую страницу уже с вбитыми туда данными. А nuxtjs вряд ли это сможет сделать просто по причине своей идеологии. Если при любом изменении базы нужно будет делать nuxt generate, который уже на моём крошечном сайте изрядно долго делается, то сервер просто рухнет от двух пользователей, редактирующих базу данных. Плюс к тому я видел на stackoverflow вопрос о том, что пока этот generate происходит, сервер лежит :) Если же рендерить содержимое, получаемое из базы, на клиенте, то прощай SEO.

Мне всего лишь нужно, чтобы каждая страничка с конкретным термином, таким как FIXME, была доступна поисковому боту без всякого JS. А похоже, что вуй так не может.

Этот веб что-то всё время похож на то, что меня душат-душат, а я как-то вырываюсь. И думаю уфффф, пронесло. Но потом меня опять начинают душить.

Ну, сейчас попробую, конечно, прорваться. Посмотрим, что выйдет.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от anonymous

Вот и отлично, все параноидальные заказчики с внутреннего рынка, которые в школе учили немецкий, будут мои. А среди богатых людей параноиков немало - у них на то есть объективные основания.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

https://ssr.vuejs.org/ru/ - вот это буду курить. Похоже, задача всё же решается более-менее сносным образом. Но всё же удивительно, почему мне нужно сделать такую простую вещь, к-рая элементарно делается руками, и для этого нужно использовать всю мощь современных технологий. Причём если бы я пришёл заниматься этим до того, как изобрели SSR, то технологии были бы вообще безсильны, только старый добрый PHP бы меня спас :)

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.