尝试学习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调用成功:
我的问题是无法获取和获取新创建的对象
我无法在商店中连接正确的业务逻辑,因此当我通过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)
}
答案 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))
期望有用的返回值。