节点|将GET连接到成功发布的数据

时间:2019-03-03 20:31:58

标签: javascript node.js rest api express

尝试学习Node。

我有一个发布请求,该请求发出诸如时间戳,温度,露点和降水之类的天气指标。

我可以使用以下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
}

您能帮助我在此处应用正确的GET业务逻辑

/* measurement-store */

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


1 个答案:

答案 0 :(得分:1)

您为什么要投入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))

期望有用的返回值。