在我的app.js
和其他路线中,我的路线指定为......
app.route('/api/patients/:id/medication').get(MedicationController.all).post(MedicationController.add)
此路线的控制器以及所有其他控制器从外部模块拉入。但是,这条路线的GET
方法非常奇怪,而POST
的效果非常好。
当我对GET
参数的网址中有效uuid
的上述路由发出id
请求时(例如/api/patients/bd4d6d44-3af3-4224-afef-d7e9a876025b/medication
),没有错误,但我得到了回应......
{
status:200,
data: []
}
这对我没有任何意义,因为我更新了MedicationController.all
函数以包含另一个用于测试的字段,因此即使查询没有结果,响应应该是......
{
status: 200,
data: [],
test: 'TEST FIELD'
}
另一件事,对我来说没有意义的是,我可以在/api/patients/bd4d6d44-3af3-4224-afef-d7e9a876025b/medafsdghads
之后输入uuid
或其他一些垃圾子路径,但仍会返回相同的奇怪响应。
如果重要,这是实际的处理程序......
export function all(req, res) {
let id = req.params.id
r.table('Patients').get(id).getField('prescriptions').run().then((results) => {
console.log(results)
return res.json({ status: 200, data: results, testField: 'TEST FIELD' })
}).catch((error) => {
console.log(error)
return res.json({ status: 400, message: 'There was an error finding the medication of patient ' + id, data: error })
})
}
以下也是所有我目前正在实施的路线......
/*********************
* PATIENT API ROUTES *
*********************/
app.route('/api/patients').get(PatientController.all).post(PatientController.add)
app.route('/api/patients/:last/:first').get(PatientController.findName)
app.route('/api/patients/:id').get(PatientController.findId)
/************************
* MEDICATION API ROUTES *
************************/
app.route('/api/patients/:id/medication').get(MedicationController.all).post(MedicationController.add)
app.route('/api/patients/:id/medication/expiration').put(MedicationController.updateAllExpirations)
app.route('/api/patients/:patId/medication/expiration/:medId').put(MedicationController.updateExpiration)
/*************************
* INSTITUTION API ROUTES *
*************************/
app.route('/api/institutions').get(InstitutionController.all).post(InstitutionController.add)
app.route('/api/institutions/:id').get(InstitutionController.findId)
app.route('/api/institutions/:name').get(InstitutionController.findName)
答案 0 :(得分:1)
您有相同网址匹配的路由重叠:
// This one:
app.route('/api/patients/:last/:first')
// And this one:
app.route('/api/patients/:id/medication')
Express与最合乎逻辑的路由不匹配,它匹配与请求匹配的第一个声明的路由。在您的情况下,/api/patients/bd4d6d44-3af3-4224-afef-d7e9a876025b/medication
与第一条路线匹配。
您应首先声明更多特定路线(匹配参数较少)。