Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Expressjs:搜索查询api_Javascript_Express_Mongoose - Fatal编程技术网

Javascript Expressjs:搜索查询api

Javascript Expressjs:搜索查询api,javascript,express,mongoose,Javascript,Express,Mongoose,我想用查询字符串搜索我的用户存储库 这将返回所有具有类似用户名“kyogron”和类似电子邮件“的用户”kyogron@gmail" 这将返回所有用户: GET localhost:3000/users 我已经设法处理了路由参数,但我一直在优化它: app.get('/users', function(req, res) { // creates a mongoosejs query object var query = User.find({}); // to un

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

这将返回所有具有类似用户名“kyogron”和类似电子邮件“的用户”kyogron@gmail"

这将返回所有用户:

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);
    });

});
这些是我正在努力解决的问题:

  • 为什么迭代req.query对象不起作用
  • 如何说猫鼬使用通配符(例如kyo*)
  • 如果有人能帮我,那就太好了:)

    问候

    编辑

    第二个问题可以用美元解决,其中:

        if (req.query.username) {
            query.$where(function() {
                return this.username === req.query.username; // here we need a regex check
            });
        }
    
    这不管用。。。谁能给我一个提示吗

    EDIT2:

    if (req.query.username) {
                query.where('username').regex(new RegExp("\/"+req.query.username+"\/"));
    }
    
    没有用$where管理任何事情。。。然而我现在发现

    query.where('username').regex();
    
    我只需要寻找一个搜索正则表达式,它可以查找类似的单词

    EDIT3:

    if (req.query.username) {
                query.where('username').regex(new RegExp("\/"+req.query.username+"\/"));
    }
    
    我发现了这样一条线索:我在mongoosejs小组中问我如何能用mongoose做到这一点

    EDIT4:

    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将允许代码可重用(可能作为前置路由参数函数),但它很容易出错