Узел |Проводка ПОЛУЧИТЬ успешно опубликованные данные - PullRequest
0 голосов
/ 03 марта 2019

Пытаюсь изучить узел.

У меня есть почтовый запрос, который отправляет такие метрики погоды, как отметка времени, температура, точка росы и осадки.

I 'я могу успешно отправить запрос со следующим req.body

У меня есть магазин, обрабатывающий бизнес-логику, то есть:

/* measurement-store */

export function addMeasurement(measurement) {
  // cache results on a new object
  const measurements = { timestamp: measurement.timestamp.toISOString() }

  if (measurement) {
    for (const [metric, value] of measurement.metrics.entries()) {
      measurements[metric] = value // retrieve metric values
    }
    return measurements
  } else {
    throw new HttpError(501)
  }
}

Таким образом, конечная точка потребляет его

/*measure-routes.js*/

import * as store from './measurement-store'
****

// Handle POST Measurements
router.post('/', (req, res) => {
  const measurement = parseMeasurement(req.body) // method to parse the req.body

  store.addMeasurement(measurement)

  res
    .location(`/measurements/${measurement.timestamp.toISOString()}`)
    .status(201)
    .json({
      message: 'Measurements were successfully created',
      measurement
    })
})

Как вы увидите здесь, вызов POST успешен:

enter image description here

Моя проблема не в том, что я не могу получить и получитьНедавно созданный объект

Я не могу подключить правильную бизнес-логику в своем магазине, чтобы при передаче вызова GET, например, http://localhost:9000/measurements/2015-09-02T16:00:00.000Z

Результаты обрабатывались с помощьюstatus 200

Это мой маршрут GET

/*measure-routes.js*/

router.get('/:timestamp', (req, res) => {
  const result = store.fetchMeasurement(new Date(req.params.timestamp))
  if (result) res.json(serializeMeasurement(result))
  else res.sendStatus(404)
})

Вот как serializeMeasurement() массирует данные.

function serializeMeasurement(measurement) {
  const out = { timestamp: measurement.timestamp.toISOString() }

  for (const [metric, value] of measurement.metrics.entries()) {
    out[metric] = value
  }

  return out
}

Можете ли вы помочь мне применить правильныйПОЛУЧИТЕ бизнес-логику здесь ??

/* measurement-store */

export function fetchMeasurement(timestamp) {
  if (timestamp) {
    console.log('FETCH', timestamp) // => 2015-09-02T16:00:00.000Z
  }
  throw new HttpError(501)
}


1 Ответ

0 голосов
/ 03 марта 2019

Почему вы добавляете fetchMeasurement()?Код, который его вызывает, не перехватывает это исключение.Кроме того, fetchMeasurement() ничего не возвращает, а код, который его вызывает, требует возвращаемого значения.

Таким образом, маршрут /:timestamp НИКОГДА не будет работать.Он выдаст и никогда не отправит ответ.

Я не уверен, что понимаю всю проблему, о которой вы спрашиваете, но вы можете начать исправлять fetchMeasurement() следующим образом:

/* measurement-store */

export function fetchMeasurement(timestamp) {
  if (timestamp) {
    console.log('FETCH', timestamp) // => 2015-09-02T16:00:00.000Z
    // return something useful here
    return someValue;
  } else {
    return null;    // caller will send response error if returned value is null
  }
}

Вам нужно будет заполнить часть, в которой fetchMeasurement() возвращает полезное значение, поскольку вызывающий код:

const result = store.fetchMeasurement(new Date(req.params.timestamp))

ожидает полезного возвращаемого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...