2017-10-09 45 views
-1

我試圖將搜索功能添加到我的應用程序。我寫了兩個函數,一個工作,另一個不工作。我試圖找出它,但沒有運氣。無法獲得工作的功能(Node JS,Mongoose)

這是工作職能:

// Add Search Functionility 
router.get('/:searchTerm', ensureLoggedIn, (req, res) => { 
    let searchTerm = req.params.searchTerm; 
    let regex = new RegExp(searchTerm.replace(/[w]/g, ":a"), 'g'); 
    let loggedUser = req.user.id; 

    User.findById(loggedUser).exec() 
    .then(foundUser => { 
    if (foundUser.role != 'admin') { 
     if (isNaN(searchTerm)) { 
     User.findById(loggedUser).populate({path: 'permits', match: {'name': regex, isAuth: true}}).exec() 
     .then(populatedUser => res.json(populatedUser.permits)) 
     .catch(err => res.send(err)); 
     } else { 
     User.findById(loggedUser).populate({path: 'permits', match: {'num': regex, isAuth: true}}).exec() 
     .then(populatedUser => res.json(populatedUser.permits)) 
     .catch(err => res.send(err)); 
     } 
    } else { 
     if (isNaN(searchTerm)) { 
     Permit.find({'name': regex, isAuth: true}).populate('authBy', 'username').sort({date: 'desc'}).exec() 
     .then(foundPermits => res.json(foundPermits)) 
     .catch(err => res.send(err)); 
     } else { 
     Permit.find({'num': regex, isAuth: true}).populate('authBy', 'username').sort({date: 'desc'}).exec() 
     .then(foundPermits => res.json(foundPermits)) 
     .catch(err => res.send(err)); 
     } 
    } 
    }) 
}); 

這是不工作的功能:

// Add Search Functionility 
router.get('/:searchTerm', ensureLoggedIn, (req, res) => { 
    let searchTerm = req.params.searchTerm; 
    let regex = new RegExp(searchTerm.replace(/[w]/g, ":a"), 'g'); 
    let loggedUser = req.user.id; 

    function searchPermitsBy(query) { 
    User.findById(loggedUser).exec() 
     .then(foundUser => { 
     if (foundUser.role != 'admin') { 
      User.findById(loggedUser).populate({path: 'permits', match: {query: regex, isAuth: true}}).exec() 
      .then(populatedUser => res.json(populatedUser.permits)) 
      .catch(err => res.send(err)); 
     } else { 
      Permit.find({query: regex, isAuth: true}).populate('authBy', 'username').sort({date: 'desc'}).exec() 
      .then(foundPermits => res.json(foundPermits)) 
      .catch(err => res.send(err)); 
     } 
     }) 
    .catch(err => res.send(err)); 
    } 
    isNaN(searchTerm) ? searchPermitsBy('name') : searchPermitsBy('num'); 
}); 

你能幫我找到問題?謝謝。

+0

https://stackoverflow.com/help/how-to-ask和https://stackoverflow.com/help/mcve – str

回答

1

問題在於你的query變量。 你不能直接使用變量向json添加一個鍵。 你必須使用
json[varContainingKey]=value

// Add Search Functionility 
router.get('/:searchTerm', ensureLoggedIn, (req, res) => { 
    let searchTerm = req.params.searchTerm; 
    let regex = new RegExp(searchTerm.replace(/[w]/g, ":a"), 'g'); 
    let loggedUser = req.user.id; 

    function searchPermitsBy(query) { 
    User.findById(loggedUser).exec() 
     .then(foundUser => { 

    //create match variable 
     var match = {isAuth:true} 

    //Add query to match variable 
     match[query]=regex 


     if (foundUser.role != 'admin') { 
      User.findById(loggedUser).populate({path: 'permits', match: match}).exec() 
      .then(populatedUser => res.json(populatedUser.permits)) 
      .catch(err => res.send(err)); 
     } else { 
      Permit.find(match).populate('authBy', 'username').sort({date: 'desc'}).exec() 
      .then(foundPermits => res.json(foundPermits)) 
      .catch(err => res.send(err)); 
     } 
     }) 
    .catch(err => res.send(err)); 
    } 
    isNaN(searchTerm) ? searchPermitsBy('name') : searchPermitsBy('num'); 
});