gpt4 book ai didi

node.js - re、res 是从哪里来的express

转载 作者:太空宇宙 更新时间:2023-11-04 03:17:52 25 4
gpt4 key购买 nike

我正在学习一些与 Express 相关的教程。

那里作者做了一个中间件

function authCheck (req, res, next) {
if (req.user) next()
else res.redirect("/somepath")
}

然后在API路由中他这样使用它

router.get("/emailfetch", authCheck, async (req, res) => {

})

问题

所以我有三个问题。

1st 我们的 authCheck 函数需要做三件事

  function authCheck (req, res, next) {

我没有看到我们在 get 路由中间件中调用它时传递它们,那么它如何获取 req, res, next

第二.假设我制作了一个辅助函数文件 helper.js ,我们的 helper.js 是否可以访问 req,res,next

3rd为什么他不执行authCheck(),而是为什么他只执行authCheck

最佳答案

1. function authCheck (req, res, next):是中间件

这里

  • req 用于请求对象,
  • res 用于响应对象,
  • next是应用程序请求-响应周期中的中间件函数,它将控制权传递给下一个 block

了解更多关于middleware的信息

express 提供传递中间件的语法,如下所示:

route.get('/your_route',yourMiddlewareFuntion,function(req,res){

});

因此您的中间件函数可以访问requestresponse对象。

2.是的,您可以在单独的文件中创建自定义中间件并在您的路由中使用它。

示例:您的 helper.js 类似于:

module.exports = function(req,res,next){
// middleware logic goes here
// like check users is logged in or not
if(req.user){
// user is logged in so able to access private route like dashboard
next();
}else{
// redirect user to login page
return res.redirect('/login');
}
}

所以现在你定义路由就像

var checkAuth=require('./helper');

route.get('/dashboard',checkAuth,function(req,res){
// user is logged in , find some data and display it
return res.render('/dashboard');
});

when you hit this route /dashboard in your browser , the request will first go through checkAuth middleware , it checks you are loggedin or not , if you are not logged in you will be redirected to login page , else your request pass to next block , that is function in your /dashboard route , that , will fetch custom data and display it on dashboard.

3.在上面的示例中,我们通过 require 它使用中间件函数并将其分配给 checkAuth 变量,这就是我们使用 checkAuth 而不是 checkAuth()

的原因

或者您可以直接在路由中使用 function(req,res,next){} 作为中间件

关于node.js - re、res 是从哪里来的express,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53932134/

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