gpt4 book ai didi

javascript - 在express中使用中间件的正确方法

转载 作者:行者123 更新时间:2023-12-01 01:09:12 25 4
gpt4 key购买 nike

嘿,我想确保我在简单的 Express 应用程序中是否使用了正确的中间件方式,我正在尝试查找用于注册的唯一电子邮件这是我的例子

const isUnique = (req, res, next) => {
User.findOne({
where:{
email: req.body.email
}
})
.then(getUser => {
if(getUser){
next("/userAlreadyExist") // router
// or can i render to to html? i am using ejs
} else {
next()
}
})
.catch(next())
}


app.post('/register', isUnique ,(req, res) => {
res.send(`thank you for register`)
}

我想确保电子邮件已经存在或不存在,因此我想首先将其传递到中间件,然后获取isUn​​ique的页面(如果电子邮件已经存在)在使用中,我想将其重定向到下一个名为 '/emailExist' 的路由器,如果成功,我想将其重定向到路由器 /success如果代码错误或没有,任何人都可以帮助我吗?只是想确定一下:D

最佳答案

您有很多选择,这里有几个。

  1. 您可以根据电子邮件是否存在将用户重定向到特定页面。在您的 /emailAlreadyExists/registerSuccess 路由中,您可以呈现您想要的任何模板或返回一些数据。
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"));
}
  1. 传递数据库查询的结果并让最终的中间件处理它:
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`);
}
}
  • 您还可以创建 error handling middleware :
  • 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}`);
    })

    关于javascript - 在express中使用中间件的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55309719/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com