NodeJS 寻找一些指导使用 Mongoose 与快递

ui7jx7zq  于 12个月前  发布在  Node.js
关注(0)|答案(1)|浏览(125)

我需要一点帮助来理解如何使用mongoose与express.我发现了一个教程,帮助我创建一个API,使用MVC类型的模式从MongoDB返回记录,但不是返回到我的路由器,它将结果写入响应,因为它是一个API..
下面是高级设置

Form.Model-包含我的Form对象的Schema
Form.Controller-包含从数据库返回记录的代码
Form.Router-这是我的路由器,将结果返回给响应对象。

这是一个我正在努力的示例路由,我想把它转换成一些东西,而不是写入res,我想返回结果,然后在我的路由器中使用它们。

// Retrieve all Forms from the database.
exports.findAll = (req, res) => {
    const email = req.query.solcon;
    var condition = email ? { email: { $regex: new RegExp(email), $options: "i" } } : {};
  
    Form.find(condition)
      .then(data => {
        res.send(data);
      })
      .catch(err => {
        res.status(500).send({
          message:
            err.message || "Some error occurred while retrieving Forms."
        });
      });
  };

字符串
来自路由器的代码(可能不正确)基本上我想调用表单路由器,返回表单,然后将它们发送到我的索引ejs页面。

router.get('/',function(req, res, next) {    
    let formList =forms.findAll(req.oidc.user.email);            
    res.render('index', { title: 'Express', user: req.oidc.user.email, forms : formList });
});


我不是一个Maven,甚至不精通使用promise,promise await..
有人能帮我转换这个查找所有功能的东西,我可以在我的形式使用。路由器发送结果到索引页。

gojuced7

gojuced71#

你的findAll似乎没有做那么多来保证它自己的方法,所以一个选择可能是把逻辑移动到路由器回调中,如下所示:

router.get('/', async function(req, res, next) { //< Mark callback as async
   try{
      const email = req.query.solcon;
      const condition = email ? { email: { $regex: new RegExp(email), $options: "i" } } : {};
    
      const formList = await Form.find(condition); //< Now you can await the results            
      res.render('index', { 
         title: 'Express', 
         user: req.oidc.user.email, 
         forms: formList 
      });
   }catch(err){
      console.log(err);
      res.render('index', { 
         title: 'Express', 
         message: 'Error on server'
      });
   }   
});

字符串
或者,你可以使用findAll作为回调函数,如下所示:

exports.findAll = async (req, res) => { //< Mark as async
   try{
      const email = req.query.solcon;
      const condition = email ? { email: { $regex: new RegExp(email), $options: "i" } } : {};
    
      const formList = await Form.find(condition); //< Now you can await the results            
      return res.render('index', { 
         title: 'Express', 
         user: req.oidc.user.email, 
         forms: formList 
      });
   }catch(err){
      console.log(err);
      return res.render('index', { 
         title: 'Express', 
         message: 'Error on server'
      });
   }   
};


然后在router中使用它,如下所示:

router.get('/', forms.findAll);

相关问题