路由表达节点js

时间:2018-02-27 23:12:58

标签: javascript node.js express

我的控制器中有以下路径方法:

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时,它总是调用第一个方法而不是第二个方法。我定义路线的方式有问题,或者我必须总是改变完整的路径。

2 个答案:

答案 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.queryreq.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

的链接
相关问题