我正在 Express.js 中开发一个 API,并尝试实现一个
app.param()
函数来处理 GET 请求中的 id 参数:
app.param('id', (req, res, next, id) => {
const envelopeIndex = Number(id);
const envelopeId = envelopes.findIndex(envelope => envelope.id === envelopeIndex);
if (envelopeId === -1) {
res.status(400).send("Error: No envelope found with this ID");
}
req.id = envelopeId;
next();
});
对于另一个将一定金额从一个信封转移到另一个信封(通过其 ID)的 POST 请求处理程序,我还想验证两个都是 ID 的路由参数 (/envelopes/:from/:to/)。
我的问题:
我尝试过:
req.id = envelopeId;
小心用自定义字段污染 req
对象,它可能会影响其他中间件,无论如何,参数已经在 req
对象上,req.params.id
。
通过避免上述情况,它也会让你的问题更容易处理。
您可以创建 2 个指向同一函数的命名参数。
例如。
const handleId = (req, res, next, id) => {
const envelopeIndex = Number(id);
const envelopeId = envelopes.findIndex(envelope => envelope.id === envelopeIndex);
if (envelopeId === -1) {
res.status(400).send("Error: No envelope found with this ID");
}
next();
});
app.param('id', handleId);
app.param('id_to', handleId);
您的 POST 路线可能只是 ->
app.post('/envelopes/:id/:id_to/', (req, res) => {
console.log(req.params.id);
console.log(req.params.id_to);
res.end('ok');
})