Py学习  »  MongoDB

NodeJS&MongoDB-无法使用稍后在MongoDB搜索中使用的表单发送参数

ItayNG • 4 年前 • 528 次点击  

我正在NodeJS&MongoDB中从事一个购物车项目,我正在尝试在我的购物页面中创建一个搜索栏。
索引.hbs

    <form action="/" method="get" id="query-form">
        <input class="col-sm-6 col-md-4 col-md-offset-4 col-sm-offset-3" 
    type="text" id="query" name="query">
        <button type="submit" class="btn btn-success">Search</button>
    </form>
    </div>
    {{# each products }}
    <div class="row">
        {{# each this }}
            <div class="col-sm-6 col-md-4">
                <div class="thumbnail">
                    <img src="{{ this.imagePath }}" alt="..." class="img- 
    responsive">
                    <div class="caption">
                        <h3>{{ this.title }}</h3>
                        <p class="description">{{ this.description }}</p>
                        <div class="clearfix">
                            <div class="price pull-left">${{ this.price }} 
    </div>
                            <a href="/add-to-cart/{{this._id}}" class="btn 
    btn-success pull-right" role="button">Add to Shopping Cart</a>
                        </div>
                    </div>
                </div>
            </div>
        {{/each}}
    </div>
    {{/each}}


索引.js

    var successMsg = req.flash('success')[0];
    if(req.query.query) {
        let query = "/" + req.query.query + "/";
        Product.find({title: {$regex: query,'$options': 'i'}},function (err, 
    docs) {
            let productChunks = [];
            let chunkSize = 3;
            for (var i = 0; i < docs.length; i += chunkSize) {
                productChunks.push(docs.slice(i, i + chunkSize));
            }
            res.render('shop/index', {title: 'Shopping Cart', products: 
    productChunks, successMsg: successMsg, noMessages: !successMsg});
    })
    }
    else
    {
        Product.find(function (err, docs) {
            var productChunks = [];
            var chunkSize = 3;
            for (var i = 0; i < docs.length; i += chunkSize) {
                productChunks.push(docs.slice(i, i + chunkSize));
            }
            res.render('shop/index', {title: 'Shopping Cart', products: productChunks, successMsg: successMsg, noMessages: !successMsg});
        });
    }});

在去毛刺时,路由似乎被请求了两次,而且在最后一次它没有要使用的“req”对象,因此没有搜索。

有什么想法吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53868
 
528 次点击  
文章 [ 1 ]  |  最新文章 4 年前
ambianBeing
Reply   •   1 楼
ambianBeing    4 年前

如果使用 $regex 查询运算符不需要附加 / 因为那样的话 而不是正则表达式。 $正则表达式 将在求值时使其成为正则表达式。

  • 有趣的是你在用 GET 使用表单(可以搜索),确保 req.query 带着 query

只需将字符串传递给regex运算符:

/*GET params in express go in req.query only*/
const queryToSearch = req.query.query;
Product.find({title: {$regex: queryToSearch,'$options': 'i'}});
  • 一经要求,请拨打两次电话:

应该是 OPTIONS 请求通常称为 pre-flight request Read More