Javascript express中中间件的正确使用方法
嘿,我想确定我是否在我的simple 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
const isUnique=(请求、恢复、下一步)=>{
User.findOne({
其中:{
电子邮件:req.body.email
}
})
。然后(getUser=>{
if(getUser){
下一个(“/userAlreadyExist”)//路由器
//或者我可以渲染成html吗?我正在使用ejs
}否则{
下一个()
}
})
.catch(next())
}
app.post('/register',是唯一的,(请求,回复)=>{
res.send(`谢谢注册')
}
你有很多选择,这里有一些
/EmailReadyExists
和/registerSuccess
路由中,您可以呈现所需的任何模板或返回一些数据你有很多选择,这里有几个
/EmailReadyExists
和/registerSuccess
路由中,您可以呈现所需的任何模板或返回一些数据如果用户已经存在,我想处理下一个路由器怎么样??: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}`);
})