2017-10-11 88 views
0

我正在學習Express.js,MongoDB和Mongoose,並且我正在創建一個小應用程序,讓我可以將項目存儲到列表中。 我想創建一個GET /列表/搜索路線,它允許搜索列表中的項目,但我還沒有得到它的工作。 這裏是我的代碼貓鼬:如何用mongoose搜索mongoDB

路線

const express = require('express'); 

router = express.Router(); 

const db = require("../models"); 

router.get('/', function(req, res, next){ 
    db.List.find().then(function(list){ 
     res.render('index', {list}); 
    }); 
}); 

router.get('/new', function(req, res, next){ 
    res.render('new'); 
}); 

router.get('/:id', function(req, res, next){ 
    db.List.findById(req.params.id).then(function(list){ 
     res.render('show', {list}); 
    }); 
}); 

router.get('/:id/edit', function(req, res, next){ 
    db.List.findById(req.params.id).then(function(list){ 
     res.render('edit', {list}); 
    }); 
}); 

router.get('/search', function(req, res, next){ 
    db.List.findOne(req.query.search).then(function(list){ 
     console.log(list); 
     res.render('show', {list}); 
    }); 
}); 

router.post('/', function(req, res, next){ 
    db.List.create(req.body).then(function(list){ 
     res.redirect('/'); 
    }); 
}); 

router.patch('/:id', function(req, res, next){ 
    db.List.findByIdAndUpdate(req.params.id, req.body).then(function(list){ 
     res.redirect('/'); 
    }); 
}); 

router.delete('/:id', function(req, res, next){ 
    db.List.findByIdAndRemove(req.params.id).then(function(list){ 
     res.redirect('/'); 
    }); 
}); 

module.exports = router;  

Index.pug 延伸base.pug

block content 
h1 My List 
form(action="/list/search" method="GET") 
    input(type="text" name="search") 
    input(type="submit", value="search") 
a(href="/list/new") Add New Item! 
each item in list 
    p ITEM: #{item.name} QUANTITY: #{item.quantity}  
      a(href=`/list/${item.id}/edit`) Edit 

我的主要問題是GET /搜索,我想將搜索查詢傳遞到搜索框並將結果返回給渲染文件

router.get('/search', function(req, res, next){ 
     db.List.findOne(req.query.search).then(function(list){ 
      console.log(list); 
      res.render('show', {list}); 
     }); 
    }); 

在此先感謝

回答

0

你需要指定的參數as attributes in the query。如果沒有找到匹配的記錄,list將爲null

router.get('/search', function (req, res, next) { 
    db.List.findOne({ 
    name: req.query.name, 
    age: req.query.age 
    }).then(function (list) { 
    console.log(list); 
    if (list === null) { 
     return res.render('show', { 
     list: [] 
     }); 
    } 
    return res.render('show', { 
     list: list 
    }); 
    }).catch((err) => { 
    console.log('err', err); 
    return res.render('show', { 
     list: [] 
    }); 
    }); 
});