我的控制器中有以下路径方法:
getListaUsuarios() {
this.app.get("/api/usuario", (req, res) => {
this.usuario.getListaUsuarios().then((results) => {
return res.status(200).json(results);
}).catch((error) => {
return res.status(500).send(error);
});
});
}
getUsuarioByEmail() {
this.app.get("/api/usuario/:usuarioEmail", (req, res) => {
let usuarioEmail = req.params.usuarioEmail;
this.usuario.getUsuarioByEmail(usuarioEmail).then((results) => {
if(!results) return res.status(404).json();
return res.status(200).json(results);
}).catch((error) => {
return res.status(500).send(error);
});
});
}
我的问题与路线有关,我们知道我们应该使用资源名称的最佳实践,在第一种方法中我正在检索用户列表,在第二种方法中我试图检索用户通过电子邮件但是当我尝试用localhost:3000/api/usuario?usuarioEmail=xxxx@xxx.com
调用api时,它总是调用第一个方法而不是第二个方法。我定义路线的方式有问题,或者我必须总是改变完整的路径。
答案 0 :(得分:0)
在网址localhost:3000/api/usuario?usuarioEmail=xxxx@xxx.com
中,usuarioEmail
是一个查询字符串;你的溃败期待它作为一个参数。给出路线的正确用法是:
localhost:3000/api/usuario/xxxx%40xxx.com
其中%40
表示@
的URI编码。
如果您确实想使用查询字符串,则需要执行以下操作:
getListaUsuarios() {
this.app.get("/api/usuario", (req, res) => {
if (!req.query.usarioEmail) { // check for the query string
let usuarioEmail = req.params.usuarioEmail;
this.usuario.getUsuarioByEmail(usuarioEmail).then((results) => {
if(!results) return res.status(404).json();
return res.status(200).json(results);
}).catch((error) => {
return res.status(500).send(error);
});
} else {
this.usuario.getListaUsuarios().then((results) => {
return res.status(200).json(results);
}).catch((error) => {
return res.status(500).send(error);
});
}
});
}
答案 1 :(得分:0)
显然,您正在将req.query
与req.query
<强> localhost:3000/api/usuario?usuarioEmail=xxxx%40xxx.com
强>
当您想要使用与您发布的网址一样的网址
时使用/api/usuarios
并且必须在getListaUsuarios() {
this.app.get("/api/usuario", (req, res) => {
if (req.query.usuarioEmail) { //Aply your logic over here
/*If wont change the value of usuarioEmail, you should use
const instead of let*/
const usuarioEmail = req.params.usuarioEmail;
return this.usuario.getUsuarioByEmail(usuarioEmail).then((results) => {
if(!results) return res.status(404).json();
return res.status(200).json(results);
}).catch((error) => {
return res.status(500).send(error);
});
}
this.usuario.getListaUsuarios().then((results) => {
return res.status(200).json(results);
}).catch((error) => {
return res.status(500).send(error);
});
});
}
路径
req.params
<强> localhost:3000/api/usuario/micorreo%40email.com
强>
当你想做这样的事情时使用
/api/usuario/:usuarioEmail
你的路线看起来就像你定义的那样
req.params.usuarioEmail
以下值:usuarioEmail位于@Output
如果您想了解有关req对象的更多信息,请点击Express documentation
的链接