javascript - Expressjs : Search query api

标签 javascript express mongoose

我想使用查询字符串搜索我的用户存储库。

这应该返回具有相似用户名“kyogron”和相似电子邮件“kyogron@gmail”的所有用户

GET localhost:3000/users?username=kyogron&email=kyogron@gmail.com

这应该返回所有用户:

GET localhost:3000/users

我已经设法处理了路由参数,但我还在优化它:

app.get('/users', function(req, res) {
    // creates a mongoosejs query object
    var query = User.find({});

    // to understand how expressjs handles queries:
    // ?username=kyogron&email=kyogron@gmail.com
    // { username: "kyogron", email: "kyogron@gmail.com" }
    //console.log(req.query);

    // this was one idea of optimizing the search query parameters
    // this doesn't work don't know why I always get an array of ALL users
    // even the key and value is right
    Object.keys(req.query).forEach(function(key) {
        query.select(key, req.query[key]);
    });

    // this was the way I was first handling the parameters, this works !!
    //if (req.query.username) query.where('username', req.query.username);
    //if (req.query.email) query.where('email', req.query.email);

    // the rest of the query
    query.select('username', 'email');
    query.exec(function(err, users) {
        if (err) throw err;
        res.json(users);
    });

});

这些是我正在解决的问题:

  1. 为什么迭代 req.query 对象不起作用?
  2. 如何说 mongoose 以使用通配符(例如 kyo*)

如果有人能帮助我,那就太好了:)

问候

编辑:

第二个问题可以用 $where 解决:

    if (req.query.username) {
        query.$where(function() {
            return this.username === req.query.username; // here we need a regex check
        });
    }

这些不起作用...有人可以给我提示吗?

编辑 2:

没有用 $where 管理任何东西......但是我现在找到了

query.where('username').regex();

我只需要寻找一个搜索相似词的正则表达式

编辑 3:

我找到了这个线程:How to query MongoDB with "like"?我在 mongoosejs 组中询问如何使用 mongoose 执行此操作

编辑4:

if (req.query.username) {
            query.where('username').regex(new RegExp("\/"+req.query.username+"\/"));
}

我差一点就明白了。只需修复这个愚蠢的正则表达式...

最佳答案

app.get('/users', function(req, res) {
    var query = User.find({});

    Object.keys(req.query).forEach(function(key) {
        query.where(key).regex(new RegExp(req.query[key]));
    });

    /*
    if (req.query.username) {
        query.where('username').regex(new RegExp(req.query.username));
    }
    if (req.query.email) {
        query.where('email').regex(new RegExp(req.query.email));
    }*/

    query.select('username', 'email');
    query.exec(function(err, users) {
        if (err) throw err;
        res.json(users);
    });

});

第一个没有用,因为我打错了(.select() 而不是 .where())。第二个是在一个额外的线程中找到的

我对所选择的方法仍然有点不确定。

迭代 req.query 将使代码可重用(可能作为路由参数函数的前提条件)但它很容易出错

关于javascript - Expressjs : Search query api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11609697/

相关文章:

node.js - 在 updateOne() 之后获取更新值

javascript - Mongoose:find() - 匹配两个值并仅返回匹配的文档

javascript:对对象数组进行排序会得出不一致的结果

javascript - Wallabyjs - 不断收到 TypeError : 'undefined'

javascript - express.static 和 CSS 文件的 MIME 类型错误

javascript - 如何将函数传递给 nodejs-express 中的 express-handlebars?

javascript - 在一行中显示尽可能多的元素,如果不是所有元素都可以容纳,则添加表示剩余元素数量的附加元素

javascript - 进入页面时如何转到特定 anchor (不起作用)

javascript - 部分 API 在 NodeJS 中不起作用。我如何解决它?

javascript - Mongo/Mongoose快速更新导致数据丢失