Ответы пользователя по тегу Node.js
  • Как тестировать такие реактовские события кликов в enzyme?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Игорь, отвечу вам на вопрос - "как в таком случае проверить, что такой-то такой-то экшен отправляется в диспетчер?", который всплыл в комментариях, и на который я изначально был настроен =) Тестировать нужно. Тестируется все по документации

    Разберем пример тестирования асинхронного экшен-крейтора на получение списка продуктов:

    Для начала код AC (action creator)
    export function getProducts() {
      return dispatch => {
        dispatch({ type: PRODUCTS_GET_REQUEST })
    
        return request.get(`${API_ROOT_V1}/api/v1/products/getAll`)
          .then(res => {
            if (!res.ok) {
              dispatch({ type: PRODUCTS_GET_FAILURE })
              dispatch(showNotification({
                status: 'err',
                text: 'something going wrong',
              }))
    
            } else {
              dispatch({
                type: PRODUCTS_GET_SUCCESS,
                data: normalize(res.body.data, schema.arrayOfProducts),
              })
            }
          }, err => {
            dispatch({ type: PRODUCTS_GET_FAILURE })
            dispatch(showNotification({
              status: 'err',
              text: err.message,
            }))
          })
      }
    }


    Получается, для тестирования функции getProducts, которая является AC, мы напишем тест, в котором ожидаем в случае успешного выполнения:
    а) что store достигло событие 'PRODUCTS_GET_REQUEST'
    б) что store достигло событие 'PRODUCTS_GET_SUCCESS' с некой data (у меня она еще нормализуется, но это не суть)

    Для этого, нам потребуется redux-mock-store (взято так же из документации).
    Собственно, сам тест:

    it('creates PRODUCTS_GET_SUCCESS when get products has been done', () => {
    
          const data = [
            {
              '_id': '5763e6eccfdb2e9d4baa58ef',
              'name': 'Product A',
              'description': 'Description of A',
              'img': 'no-photo',
              '__v': 0,
              'providers': [],
            },
            {
              '_id': '5763e6eccfdb2e9d4baa58f0',
              'name': 'Product B',
              'description': 'Description of B',
              'img': 'no-photo',
              '__v': 0,
              'providers': [],
            },
          ]
    
          nock(`${API_ROOT_V1}`)
            .get('/api/v1/products/getAll')
            .reply(200, { data })
    
          const expectedActions = [
            { type: PRODUCTS_GET_REQUEST },
            { type: PRODUCTS_GET_SUCCESS, data: normalize(data, schema.arrayOfProducts) },
          ]
    
          const store = mockStore([])
    
          return store.dispatch(getProducts())
            .then( () => expect(store.getActions()).to.deep.equal(expectedActions) )
        })


    То есть, отвечая на вопрос:
    как в таком случае проверить, что такой-то такой-то экшен отправляется в диспетчер

    1) const store = mockStore([])
    2) store.getActions()
    3) сравниваем полученное в п.2 с тем, что ожидаем.

    Здесь я попутно использовал nock для "мока" запроса к API. И немного подробнее описал ожидаемую "фейковую" дату (хотя это было не обязательно). Главное суть: мы ожидаем, что некоторые "экшены" достигнут стора. Это и протестировали.
    Ответ написан
  • Return выполняется раньше получения данных с помощью request, как побороть?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Разобраться как работает асинхронный код. Поставить return в нужном месте и наслаждаться.
    Пример использования дан сразу на главной странице request'a
    var request = require('request');
    request('http://www.google.com', function (error, response, body) {
      if (!error && response.statusCode == 200) {
        console.log(body) // здесь точно уже есть данные
      }
    })
    Ответ написан
    Комментировать
  • Зачем нужен модуль assert?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Что мешает написать в google - npm NAME и узнать про любой модуль в первой ссылке, которая обычно ведет на npm сайт?
    Например, npm assert => https://www.npmjs.com/package/assert =>
    This module is used for writing unit tests for your applications, you can access it with require('assert').

    в переводе: модуль используется для написания unit-тестов.
    Ответ написан
    Комментировать
  • Cтоит ли публиковать статью по работе с простенькой библиотекой jsonrpc?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    А куда материалу на русском кроме хабра? На хабре есть шанс получить критику от неглупых людей. Кроме хабра - больше негде :(

    Да и может кому-то будет полезно, поэтому пишите! Хуже точно не будет.
    Ответ написан
    Комментировать
  • Django и React Hot Module Reload?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Может быть ваш файл index.tsx не лежит внутри
    path.join(__dirname, 'client')
    ?
    В противном случае, попробуйте создать что-нибудь на одном уровне с app.tsx, подключить это внутри app и поизменять. В целом, судя по вашему конфигу, я проблем не вижу.
    Ответ написан
  • Какой выбртаь фреймфорк для real-time карт (postgresql)?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Кнокаут вряд ли, ибо старый уже (хотя вижу, что релиз вышел 17 ноября 2015...)
    NodeJS - это бэкэнд вообще.

    Далее, идете в гугл, пишите "{фреймворк} leaflet" и смотрите сколько есть материала, какой из них более подробный и вам больше нравится. Какие уже есть готовые решения и так далее. Например, react leaflet
    Ответ написан
    Комментировать
  • Как подключить модуль с помощью require()?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    В этом курсе, вы найдете ответы на ваши вопросы - learn.javascript.ru/screencast/webpack
    Как вам уже сказал, Дмитрий, чтобы require работал - нужно использовать сборщик, который умеет превращать require в нативную функцию подргузки модуля где-то из недр своего файла.

    В вашем случае, require не может работать, так как такой функции нет в window объекте (как известно, глобальный объект для клиентского js - window)
    Ответ написан
    Комментировать
  • Node js: Error: Can't set headers after they are sent что произошло?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Ошибка говорит о том, что у вас express пытается ответить с заголовком (в стиле "Статус 200" - все ок).
    Проблема в том, что у вас уже был ответ, и еще раз ответить он не может. Дословно: не могу установить заголовки, после того, как они отправлены.

    Решение, всегда использовать ключевое слово return, когда вы "отвечаете". В вашем примере это либо res.json, либо next. Суть в этом.
    Пример из api:
    d4b2dd2981684414a39e31573f403b77.jpg
    Если убрать return, то в случае ошибки, мы попадем в if (err) ..., ответим как ошибка(400), и не выйдем из роутинг функции, пойдем ниже и ответим как успешно(200) - и бам-с, получим ошибку - не могу установить заголовки...
    Ответ написан
    2 комментария
  • Почему query получает не корректное значение?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    req.params.query
    Ответ написан
    Комментировать
  • AMD или CommonJS?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    а если вы будете использовать require.ensure (из мира webpack) - это не решит вашу проблему? подробнее здесь - https://www.youtube.com/watch?v=Om6yGdU_YlQ
    Ответ написан
    Комментировать
  • Можно ли в Node.js включить многопоточность?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    По прежнему актуально(?) learn.javascript.ru/screencast/nodejs
    Первая часть как раз про "нативную ноду"
    Ответ написан
    5 комментариев
  • Как обновить массив вложенных документов в MongoDB?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    function deleteCategory(req, res, next) {
        model.CategoryModel.findByIdAndUpdate(req.params.id, { isDeleted: true }, function(err, category) {
            if (err) return next(err);
    
            category.image.forEach(item => {
              item.isDeleted = true
            })
    
            category.isDeleted = true/false // что вам тут нужно
    
            category.markModified('image') //http://mongoosejs.com/docs/faq.html
    
            model.CategoryModel.save((err, updatedItem) => {
              if (err) {
                return res.status(400).json({ message: err.message })
              } else {
                return res.json({ message: "Категория успешно удалена" })
              }
            })
        });
    }
    Ответ написан
    6 комментариев
  • Можно ли установить Apache и node.js на одном vds сервере?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Digital Ocean. Ставите туда что хотите. Настраиваете как угодно.
    Ответ написан
  • Какой модуль/midelware для загрузки изображений на сервер node.js/express выбрать?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Есть универсальный совет: когда выбираете модули, смотрите github проекта
    - когда было последнее обновление?
    - сколько issues не закрытых (и мельком, какие они)
    - сколько звезд

    Допустим модуль обновляется, пулреквесты автор принимает и публикует, критических issues мельком не видно. Тогда уже можно смотреть api модуля. Если нравится - берем и пробуем использовать. Если работает и делает что нужно - оставляем.
    Ответ написан
    Комментировать
  • Локальная установка webpack?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    1. Да, вам нужен файл package.json, сгенерировать его можно с помощью npm init (по ходу отвечая на вопросы)
    2. Во втором видео на 52й секунде Илья устанавливает webpack "глобально":
    npm i -g webpack
    Поэтому у него хоть и нет в проекте папки node_modules - все корректно работает.

    Дополнительно:
    Если вы устанавливаете модули локально, создается папка node_modules, куда они собственно говоря и устанавливаются.

    P.S. советую посмотреть его скринкаст по node.js, чтобы стало понятно, как node.js ищет пакет, в упрощенном случае: сначала локально, потом глобально (почему упрощенно? потому что, так же еще ищет сначала у вас по относительному пути с расширением .js, потом .json, потом локально тоже самое в node_modules, потом глобально... Может быть что-то еще упустил, в скринкасте по node.js это точно было)
    Ответ написан
    4 комментария
  • Как установить nodejs определенной версии?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Update к ответу: если ставить NVM после того как стоит node.js - у вас, возможно, не будет желаемого результата.
    Поэтому: удалите полностью node.js со всеми модулями (включая глобальные) - https://www.google.ru/webhp?sourceid=chrome-instan..., затем установите NVM и установите node.js нужной версии через него.
    Ответ написан
    Комментировать
  • Как правильно обновить зависимости в MEAN stack приложении?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Когда facebook выкатывает новую версию react, они пишут:
    "Мы убрали такую-то штуку... 99% наших тестов прошло успешно, в остальном мы немного подпилили код и вуаля".
    То есть, однозначно, с тестами обновиться вам будет проще. Но писать тесты для всего приложения (не своего, да еще и с небольшим опытом) - это объемная и долгая задача.

    По сути, если вы оцените время на написание тестов - это будет в худшем случае половина, в лучшем 9/10 общего времени на задачу.

    На мой взгялд, если не стоит задачи заработать денег / закрыть критический баг - не стоит вовсе обновляться.

    Есть Вредный совет для успокоения души:
    Взять проект, создать отдельную ветку, удалить папку node_modules, установить утилиту npm-check-updates и посмотреть для скольких пакетов у вас есть обновления. NCU так же укажет, что "для некоторых пакетов есть новые версии, которые превышают правило в package.json". Если готовы обновить вообще все, используйте ncu -a, а потом npm install. Запускайте приложение и смотрите сколько будет errors/warnings.
    Ответ написан
    Комментировать
  • Как использовать модуль FS внутри приложения Electron.Atom\WebPack?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Попробуйте посмотреть этот вопрос. (к сожалению, на англ.)
    p.s. в комментариях решили проблему, поэтому читайте последний.
    Ответ написан
    5 комментариев
  • Какой фреймфорк для Node.js(плюс React.js на клиенте) выбрать?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Подскажите, какой фреймворк выбрать для node.js, при условии, что на фронтенде будет React.js ?

    Не вижу связи.

    А по фреймворкам для сервера на node, я не слышал ничего популярнее express / koa.

    Возможно, вам вовсе не нужен фреймворк для реализации чата.
    Ответ написан
    3 комментария
  • Как узнать из какого модуля ошибка?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Как узнать?
    Поиском по проекту "React.findDOMNode", но я подозреваю, что это где-то в самом верхнем компоненте у вас. Либо просто поиском по "findDOMNode", так как где-то может быть подключено так: import React, {findDOMNode} from 'react'

    Как исправить?
    а) npm install react-dom
    б) везде где используете React.findDOMNode заменить на findDOMNode, предварительно в каждом файле проимпортировав: import { findDOMNode } from 'react-dom'

    Суть ошибки в том, что функция findDOMNode переехала в отдельный пакет, а у вас она используется из пакета 'react'.
    Ответ написан
    1 комментарий