尝试学习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调用成功:

javascript -  Node |将GET连接到成功发布的数据-LMLPHP

我的问题是无法获取和获取新创建的对象

我无法在商店中连接正确的业务逻辑,因此当我通过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)
}


最佳答案

为什么要扔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))


期望有用的返回值。

10-06 14:02