A
Знаю про apidoc 🙂
Алексей
Но я не пробовал ни fastify, ни этот пакет
Anonymous
Можно из доков сваггер к экспрессу автоген сделать Если наоборот, то в feathersjs видел плагин
Алексей
Вообще, мой предел мечтаний, что бы по одной и той же схеме в коде и валидация происходила и дока сваггера генерировалась
Anonymous
И валидация была вроде
Anonymous
Давно делал как-то https://github.com/maxsh8x/candy-server/blob/dev/app/routes/api/scope.js
A
esdoc, насколько я понимаю, это про другое. Допустим, поля класса описать)
Алексей
ещё желательно бы не в комментах это всё делать, а в JS, а точнее в TS коде тогда вообще шикарно будет: и автодополнение IDE по схеме и контроль правильности схемы на этапе компиляции
A
Давно делал как-то https://github.com/maxsh8x/candy-server/blob/dev/app/routes/api/scope.js
это работает до определенного предела. Потом оно начинает не совпадать
Anonymous
Как не совпадать?
Anonymous
Валидация, тип запроса и прочее по ней генерится
Evgeny
Можно попробовать использовать ajv и https://swagger-toolbox.firebaseapp.com/
A
ещё желательно бы не в комментах это всё делать, а в JS, а точнее в TS коде тогда вообще шикарно будет: и автодополнение IDE по схеме и контроль правильности схемы на этапе компиляции
это да. Но для этого надо, чтобы все одинаково писали. Поэтому к какому-то фреймворку это еще можно прикрутить. Ну, вот допустим loopback это искоробки делает. А вот с экспрессом это уже сложнее сильно.
A
Валидация, тип запроса и прочее по ней генерится
Так просто же. Сходил в метод, поменял token на key, а доку забыл обновить. Вот и всё. Когда у тебя 10 таких мест и ты один в команде - оно работает. Когда 500+ мест и пара человек в команде - нет
Anonymous
Тогда тебе выдаст апиха что нету token
petyappetrov
Привет, народ! Можно ли в express статику хранить вне папки сервера?
Anonymous
petyappetrov
Конечно можно, я разрешаю.
спасибо, каким образом? express.static('../../../static') ?
Алексей
спасибо, каким образом? express.static('../../../static') ?
можно и так, можно абсолютный путь указать
A
Почему сложнее? Максимум - свой роутер завести или пропатчить стандартный.
ну вот смотри. Это экспресс + немного валидации через json schema
A
Это "живая" дока)
Ну, она вроде умеет делать тесты из этого. В таком случае да. А вот если это просто статичная дока - страничка, тогда всё грустно.
сomorsiс
await забыл?
сomorsiс
а, не
A
тут в чём замес: 1. кастомная валидация 2. кастомный обработчик форм 3. кастомный аутпут 4. кастомный статус код на основе того, что там выпало из промиса Я понимаю, что нету коробочного решения чтобы из этого доку сгенерировать. Но хотелось бы что-то за основу взять. Потому что входящие данные определены json schem-ой, а исходящие доморощенным декларативным языком процессинга данных.
Алексей
ну вот смотри. Это экспресс + немного валидации через json schema
Можно пропатчить методы роутера через прототип, чтобы они просматривали все middleware на наличие какого-то определённого поля, типа _scheme, создать middleware creator, которая будет заполнять это поле. И тогда получится, что роутер будет знать схемы ко всем роутам. По этим схемам строить валидацию и swagger доку.
A
Можно пропатчить методы роутера через прототип, чтобы они просматривали все middleware на наличие какого-то определённого поля, типа _scheme, создать middleware creator, которая будет заполнять это поле. И тогда получится, что роутер будет знать схемы ко всем роутам. По этим схемам строить валидацию и swagger доку.
это понятно что можно) Но это городить огород надо, причём этот огород еще и рантайм затронет. Я всё больше склоняюсь к кастомному процессору jsdoc-а, благо он вроде бы не сложный должен быть. Но с нуля делать не хотелось бы. Поэтому и спросил у кого что
Алексей
валидацию по любому в рантайме надо будет делать, а построить доку сваггера можно на этапе инициализации, для этого правда придётся пропатчить роутер, чтобы он сохранял информацию
Алексей
но это всё мечты
Алексей
а не готовое решение к сожалению
Алексей
о
Алексей
https://www.npmjs.com/package/swagger-spec-express
Vadim
Привет! Паршу записи с файлов в БД на Монгусе, естественно пользователи могут пихать файлы с уже имеющимися в БД значениями. Можно ли как то сдедать, чтобы эти повторные значения отсеивались? Я пробовал сделать уникальное поле, но через insertMany выдается ошибка при записи повторных
Vadim
Я имею ввиду какой нить элегантный способ, а не вставки по одному с предпроверкой
Joseph
Как можно развернуть такую линку , не соображу как сконфигурировать populate
Anton
Добрый день, есть такой вопрос, а есть способ одновримено запустить node+gulp на одном порте что бы сразу смотреть и правки по файлам и изменения по стилям, скриптам и т.д.
Anton
сейча пользуюсь nodemon+gulp-connect но для того что бы все работало в живую запуска на разных портах (Пример :3000 и :3001)
Anton
лол, все уже придумано до нас) спасибо )
Sasha
Доброго часа. Имею ubuntu 16.04 и node 4.2.6, однако для запуска zombie нужна node 4.5 >=/ Насколько хорошо пользоваться nvm для решения данной проблемы?
Anonymous
NVM РУЛЕТ)))
Georgiy
NVM РУЛЕТ)))
в докере не работает
Georgiy
без лишних костылей
Anonymous
в докере не работает
Ооо извините Я не в курсе в этом теме
Anonymous
Точнее не разу не пробовал в докере
petyappetrov
астанавитесь
Sasha
может можно подцепить репозиторий node в таком случае и обновить, более штатными средствами?
Georgiy
а у тебя есть необходимость держать две версии ноды ?
Georgiy
вместо одной текущей ?
Sasha
нет, я надеюсь, что мне хватит новой
Georgiy
ну тогда лучше штатными. если есть необходимость то nvm
Timofey
есть тз и там такое пояснение: 1. На вход получаем некий объект вида {field1: value1, fields..., ttl: seconds} 2. Сервис определяет есть ли в базе документ с такими полями: как вы это понимаете? речь идет о наличии самих полей или о полях с учетом их значений?
Dmitry
let db = MongoClient.connect(url) .then(_db => { return db = _db }) bot.start(ctx => { // выполнится позже db.collection('sessions') .then(res => { console.log(res) }) }) db.collection(...).then is not a function хотя на момент вызова db.collection() - db уже вернулся
Dmitry
let db = MongoClient.connect(url) .then(_db => { return db = _db }) bot.start(ctx => { // выполнится позже db.collection('sessions') .then(res => { console.log(res) }) }) db.collection(...).then is not a function хотя на момент вызова db.collection() - db уже вернулся
let db = MongoClient.connect(url) .then(_db => { return db = _db }) .then(res => { console.log('---') return db.collection('sessions') }) .then(res => { console.log(res) }) вот так работает
Dmitry
return db = _db OH GOD. WHY???
а как по-другому?
V
какой-то лютый треш происходит
Алексей
а как по-другому?
const db = await MongoClient.connect(url) bot.start(ctx => { // выполнится позже const collection = db.collection('sessions') console.log(collection) })
Алексей
и db.collection возвращает сразу коллекцию
Алексей
а не промис
Dmitry
а не промис
да ладно
Dmitry
сапсибо, сейчас про awayt-ы почитаю, не использовал ещё
Алексей
блин, придётся залезть в тайпинг и проверить
Evgeny
и db.collection возвращает сразу коллекцию
Обьект с которым можно работать, да
Dmitry
блин, придётся залезть в тайпинг и проверить
Db~collectionResultCallback возвращает, пишут
Алексей
сапсибо, сейчас про awayt-ы почитаю, не использовал ещё
Это на самом деле чуть ли не самая крутая фича в JS. По моему мнению.
Алексей
Db~collectionResultCallback возвращает, пишут
Нет. Есть версия с колбэком, есть без. И которая без, она сразу коллекцию возвращает.
Алексей
а как понять, где какая версия?
чего? есть версия которая принимает коллбэк вторым аргументом
Алексей
точнее даже не версия
Алексей
а поведение функции
Алексей
то есть функция то одна и та же
Dmitry
чего? есть версия которая принимает коллбэк вторым аргументом
let db = MongoClient.connect(MONGO_URL) .then(_db => { return db = _db }) .then(db => db.collection('sessions')) .then(collection => { console.log(collection) }) тут с промисом
V
а зачем ты промис чему-то приравниваешь?
Алексей
let db = MongoClient.connect(MONGO_URL) .then(_db => { return db = _db }) .then(db => db.collection('sessions')) .then(collection => { console.log(collection) }) тут с промисом
она не возвращает промис, она возвращает сразу коллекцию, коллекция на выходе из then оборачивается в промис
V
зачем ты его в переменную пихаешь?