• Как получить имя параметра маршрута Express?

    @Pavel_Tkachenko Автор вопроса
    Abcdefgk Когда запрашивается страница пользователя
    к примеру /user/5af2fe6cc7a7631ae040db43 выполняется в Express маршрут /user/:userId, в БД хранится информация о странице (заголовок, описание и т.п.), для того что бы получить эту информацию сначала выполняется middleware который выбирает эти данные из БД и подставляет к примеру в res.locals.title, но в БД не хранится информация о динамических маршрутах (/user/5af2fe6cc7a7631ae040db43), а хранится информация о маршруте с параметром (/user/:userId), для того что бы найти в БД информацию о маршруте, преобразуется из /user/5af2fe6cc7a7631ae040db43 в /user/:, и по этому преобразованию выполняется поиск соответствующей записи в БД...
  • Как в Express определить маршруты в системе CRUD?

    @Pavel_Tkachenko Автор вопроса
    Понял, спасибо... Задача просто стоит в организации контроля доступа, хотел сделать мидлваре для проверки у пользователей разрешение к ресурсу основываясь на сессиях и списке ресурсов...
  • Как спроектировать RESTful API?

    У меня к вам вопрос, а как вы приводите свои адреса к REST? Я использую Express...
    К примеру есть маршруты:
    router.route('/')
        .get((req, res) => {
            // Просмотр какого нибудь списка
        })
    
    router.route('/:element')
        .get((req, res) => {
            // Просмотр элемента списка
        })
        .put((req, res) => {
            // Обновление элемента списка
        })
        .delete((req, res) => {
            // Удаление элемента списка
        })
    
    router.route('/add')
        .get((req, res) => {
            // Страница добавление элемента в список
        })
        .post((req, res) => {
            // Добавление элемента в список
        })

    Как можно указать, что маршрут к примеру router.route('/add') это create, а router.route('/:element') это read, updateи delete
    Я уже описывал свой вопрос тут, просто интересно, как вы это сделали, или за такие вещи отвечает фреймворк access control который вы используете
  • Как построчно разделить массив each в jQuery?

    В вашем коде ошибка, так как за место искомого элемента он просто берет текст всех параграфов и пихает в textdesc с каждым шаг цикла, то есть перезаписывает данные внутри textdesc каждый раз
  • Удаление объекта из массива в NodeJS или неправленый скрипт?

    @Pavel_Tkachenko Автор вопроса
    Спасибо за помощь)))
    Я свой немного переделал и вроде как заработало)))
    routes.forEach((element, i, arr) => {
            j = arr.length-1;
            while(j >=0) {
                if (j !== i && element.path === arr[j].path) {
                    element.methods.push(arr[j].methods[0])
                    arr.splice(j, 1)
                }
                j--
            }
        });
  • Логгирование для Nodejs?

    @Pavel_Tkachenko Автор вопроса
    В в общем дело обстоит так:
    1. а тут руководство для создания нескольких логгеров.
      Это не позволяет работать с пользовательскими уровнями...
    2. Использую :
      1. "winston": "2.4.0",
      2. "winston-daily-rotate-file": "^1.7.2",
      3. "winston-mongodb": "3.0.2"
    3. В файл /logs/index.js
      //// ОБЕРТКА ДЛЯ ЛОГГЕРА WINSTON
      //// ПОДКЮЧАЕМЫЕ МОДУЛИ
          var path = require('path');
          var winston = require('winston');
          var config = require('../config').get();
      
      //// ПОДКЛЮЧАЕМЫЕ РАСШИРЕНИЯ ДЛЯ WINSTON
          // Для записи логов в mongodb
          require('winston-mongodb');
          // Для записи логов в файлы по дням
          require('winston-daily-rotate-file');
      
      //// ПУТИ К ФАЙЛАМ ЛОГОВ
          // Единый файл логирования 
          var applogFile = path.join(__dirname,'logs','app.log');
          // Путь к файлам логов по дням
          var appLogFilesPath = path.join(__dirname,'logs','/');
      
      //// ЛОГИРОВАНИЕ ПРИЛОЖЕНИЯ
          var appLog = new winston.Logger({
              level : 'debug',
              transports : [
                  new winston.transports.Console({
                      label : 'app',
                      colorize: true,
                      timestamp : true,
                  }),
                  new winston.transports.File({
                      filename : applogFile
                  })
              ]
          });
      
      //// ЛОГИРОВАНИЯ ПРИЛОЖЕНИЯ ПО ДНЯМ (ЕСЛИ НАДО)
          var altAppLog = new winston.Logger({
              level : 'debug',
              transports : [
                  new winston.transports.Console({
                      colorize: true,
                      label : 'app',
                      timestamp : true,
                  }),
                  new winston.transports.DailyRotateFile({
                      filename : './log',
                      datePattern : `${appLogFilesPath}dd-MM-yyyy.`,
                      prepend : true,
                      maxDays : 90
                  })
              ]
          });
      
      //// ПОЛЬЗОВАТЕЛЬСКИЕ УРОВНИ И ЦВЕТА
          var usersLog = {
              levels: {
                  delete: 0,
                  update: 1,
                  create: 2,
                  read: 3,
                  logout: 4,
                  login: 5
              },
              colors: {
                  delete: 'red',
                  update: 'yellow',
                  create: 'green',
                  read: 'silver',
                  logout: 'purple',
                  login: 'blue'
              }
          };
          // Даем винстону знать о пользовательских цветах
          winston.addColors(usersLog.colors);
      
      //// ЛОГИРОВАНИЕ ДЕЙСТВИЙ ПОЛЬЗОВАТЕЛЕЙ В БАЗУ ДАННЫХ
          var userLog = new winston.Logger({
              // Указываем пользовательские уровни
              levels: usersLog.levels,
              // Указываем с какого уровня логировать (обязательно, не будет работать без этого)
              level : 'login',
              transports : [
                  new winston.transports.Console({
                      label : 'user',
                      colorize: true,
                      timestamp : true,
                  }),
                  new winston.transports.MongoDB({
                      level : 'login',
                      db : `mongodb://${config.db.host}:${config.db.port}/${config.db.name}`,
                      collection: 'logs',
                      storeHost: true
                  })
              ]
          });
      
          module.exports = {
                  app : appLog,
                  alt : altAppLog,
                  user : userLog,
          };


    4. В файл где нужно что то логгировать
      var log = require('./logs');
      // Так запись в файл и отображение в консоли уровня info
       log.app.info('Текст сообщения')
      // Так запись в файл по дням и отображение в консоли уровня info
       log.alt.info('Текст сообщения');
      // Так запись в бд и отображение в консоли уровня login
       log.user.login('Текст сообщения')





    Пока это все в чем я преуспел)))