Javascript express中中间件的正确使用方法

Javascript express中中间件的正确使用方法,javascript,node.js,validation,express,Javascript,Node.js,Validation,Express,嘿,我想确定我是否在我的simple express应用程序中使用了中间件的正确方法,我正在尝试查找唯一的注册电子邮件 这是我的例子 const isUnique=(请求、恢复、下一步)=>{ User.findOne({ 其中:{ 电子邮件:req.body.email } }) 。然后(getUser=>{ if(getUser){ 下一个(“/userAlreadyExist”)//路由器 //或者我可以渲染成html吗?我正在使用ejs }否则{ 下一个() } }) .catch(n

嘿,我想确定我是否在我的simple express应用程序中使用了中间件的正确方法,我正在尝试查找唯一的注册电子邮件 这是我的例子

const isUnique=(请求、恢复、下一步)=>{
User.findOne({
其中:{
电子邮件:req.body.email
}
})
。然后(getUser=>{
if(getUser){
下一个(“/userAlreadyExist”)//路由器
//或者我可以渲染成html吗?我正在使用ejs
}否则{
下一个()
}
})
.catch(next())
}
app.post('/register',是唯一的,(请求,回复)=>{
res.send(`谢谢注册')

}
你有很多选择,这里有一些

  • 您可以根据电子邮件是否存在将用户重定向到特定页面。在
    /EmailReadyExists
    /registerSuccess
    路由中,您可以呈现所需的任何模板或返回一些数据
  • 传递db查询的结果,并让您的最终中间件处理它:
  • 您还可以创建一个:

  • 你有很多选择,这里有几个

  • 您可以根据电子邮件是否存在将用户重定向到特定页面。在
    /EmailReadyExists
    /registerSuccess
    路由中,您可以呈现所需的任何模板或返回一些数据
  • 传递db查询的结果,并让您的最终中间件处理它:
  • 您还可以创建一个:

  • 如果用户已经存在,我想处理下一个路由器怎么样??:Dcan i redirect?很好,让我试试,谢谢你解释:如果用户不存在,我们将其重定向到下一个路由器,这意味着我们没有使用中间件?因为我们停止了它?那么这是调用next()的最佳方式吗对于else?Express中间件是一系列处理单个请求的函数。当您调用
    next()
    时,您将控制权移交给序列中的下一个中间件函数。因此,在
    app.post('/register',isUnique,(req,res)=>…)
    ,如果您调用
    next()
    如果
    isUnique
    中没有参数,您将把控制权传递给
    (req,res)=>…
    函数。您可以查看Express,如果您仍然迷路,请尝试将打印语句放入函数中,看看会发生什么情况如果用户已经存在,我是否要处理下一个路由器??:Dcan i redirect?很好,让我试试,感谢您解释:Dif user not exist我们将其重定向到下一个路由器,这意味着我们不使用中间件?因为我们停止了它?那么这是为else调用next()的最佳方式吗?Express中间件是一系列处理单个请求的函数。当您调用
    next()
    ,您将控制权移交给序列中的下一个中间件函数。因此在
    app.post('/register',是唯一的,(req,res)=>…)
    ,如果调用
    next()
    且内部没有参数
    isUnique
    ,您将把控制权传递到
    (req,res)=>…
    函数中。您可以签出Express,如果仍然丢失,请尝试在函数中放入print语句,看看会发生什么
    const isUnique = (req, res, next) => {
       User.findOne({
          where:{
            email: req.body.email
          }
       })
       .then(getUser => {
            if (getUser) {
                res.redirect('/emailAlreadyExists');
            } else {
                res.redirect('/registerSuccess'); // or just call next()
            }
       })
       .catch(next("DB error"));
    }
    
    const isUnique = (req, res, next) => {
       User.findOne({
          where:{
            email: req.body.email
          }
       })
       .then(getUser => {
            req.user = getUser;
            next();
       })
       .catch(next());
    }
    
    app.post('/register', isUnique ,(req, res) => {
        if (req.user) {
            res.send('User already exists');
        } else {
            res.send(`thank you for register`);
        }
    }
    
    const isUnique = (req, res, next) => {
       User.findOne({
          where:{
            email: req.body.email
          }
       })
       .then(getUser => {
            if(getUser){
              next("Error: user already exists"); // or some other error message/object
            } else {
              next(); // continue to next middleware
            }
       })
       .catch(next("DB error")); // handle errors throw from DB read
    }
    
    
    app.post('/register', isUnique ,(req, res) => {
        res.send(`thank you for register`)
    }
    
    /*
        If you call "next" with an argument, Express will skip 
        straight to this error handler route with the argument 
        passed as the "err" parameter
    */
    
    app.use((err, req, res, next) => {
        console.error(err.stack);
        res.status(500).send(`An error occurred: ${err}`);
    })