Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何加上「;“授权”;检查选择性API';他在哪里?_Javascript_Node.js - Fatal编程技术网

Javascript 如何加上「;“授权”;检查选择性API';他在哪里?

Javascript 如何加上「;“授权”;检查选择性API';他在哪里?,javascript,node.js,Javascript,Node.js,我有一个基于react+节点的项目,我在dist/目录中构建所有基于react的组件,然后将此目录上载到服务器,并通过nodeJSexpress.static()方法为其提供服务 server.use(express.static(u dirname+'/dist')) 我还编写了一个节点中间件,它捕获每个请求并检查是否向其传递了auth令牌 users.use(function(req, res, next) { const token = req.headers.authorizat

我有一个基于react+节点的项目,我在
dist/
目录中构建所有基于react的组件,然后将此目录上载到服务器,并通过nodeJS
express.static()
方法为其提供服务

server.use(express.static(u dirname+'/dist'))

我还编写了一个节点中间件,它捕获每个请求并检查是否向其传递了auth令牌

users.use(function(req, res, next) {
    const token = req.headers.authorization
    if (token) {
        jwt.verify(token, process.env.SECRET_KEY, function(err) {
            if (err) {
                res.status(400).json({message : err})
            } else {
                next();
            }
        });
    } else {
        res.status(400).json({message : 'Please send a token'})
    }
})
但我现在面临的问题是,当我运行URL时,比如
http://localhost:3001/dashboard
,节点中间件也会捕获它并检查令牌,而不是呈现我的webview


如何区分nodeJS中的webview请求和其他服务器请求?您需要为所有路由添加重定向,以指向
index.html
或任何您的起始页

/*  route to static files */
server.use('/static-route-here', express.static(__dirname + '/static-folder-here'))

/* multiple definitions of other server routes */
server.get('api/*', authMiddleWare ,(req, res) => {
  /*do api stuff here*/
})

/* anything else is redirected to index.html */
server.get('*', (req, res) => {
  res.sendFile(__dirname + '/index.html');
})

您需要为所有路由添加重定向,以指向
index.html
或任何您的起始页

/*  route to static files */
server.use('/static-route-here', express.static(__dirname + '/static-folder-here'))

/* multiple definitions of other server routes */
server.get('api/*', authMiddleWare ,(req, res) => {
  /*do api stuff here*/
})

/* anything else is redirected to index.html */
server.get('*', (req, res) => {
  res.sendFile(__dirname + '/index.html');
})

如果只需要检查某些特定API的身份验证,可以通过以下3种方式执行:

  • 在auth check函数之前/之前编写所有不使用auth的函数(API)
  • `

    `

  • 修改Auth函数以跳过所有
    GET
    API注意:仅当您使用
    GET
    加载HTML页面,而不是像搜索任何其他信息那样获取数据时,才使用此选项。
  • `

    `

  • 仅从需要检查身份验证的API调用身份验证函数,如:
  • `

    `


    在所有这些中,我更喜欢第三个,因为它可以让您灵活地将其作为一个函数使用,并且可以在任何需要它的地方使用

    如果只需要检查某些特定API的身份验证,可以通过以下3种方式执行:

  • 在auth check函数之前/之前编写所有不使用auth的函数(API)
  • `

    `

  • 修改Auth函数以跳过所有
    GET
    API注意:仅当您使用
    GET
    加载HTML页面,而不是像搜索任何其他信息那样获取数据时,才使用此选项。
  • `

    `

  • 仅从需要检查身份验证的API调用身份验证函数,如:
  • `

    `


    在所有这些中,我更喜欢第三个,因为它可以让您灵活地将其作为一个函数使用,并且可以在任何需要它的地方使用

    我是否必须给出静态路径<代码>服务器。使用('/static route here…是的,理想情况下,您的api的路由应该与您的网站的路由不同,我建议为所有api添加一个父路由。我该如何做(为所有api添加父路由)?@DeanAmbrose,将所有api保留在/api路由下,否则我必须提供静态路径…
    server.use('/static route here
    …是的,理想情况下,您的api的路由应该与您的网站的路由不同,我建议为所有api添加一个父路由。我该怎么做(为所有api添加父路由)?@DeanAmbrose,将您的所有api保持在/api路由下
    users.use(function(req, res, next) {
        //Just a check for `GET` API
        if(req.method === 'GET') {return next();}
    
        const token = req.headers.authorization
        if (token) {
            jwt.verify(token, process.env.SECRET_KEY, function(err) {
                if (err) {
                    res.status(400).json({message : err})
                } else {
                    next();
                }
            });
        } else {
            res.status(400).json({message : 'Please send a token'})
        }
    });
    
    function checkAuth (req, res, next) {
    
        const token = req.headers.authorization
        if (token) {
            jwt.verify(token, process.env.SECRET_KEY, function(err) {
                if (err) {
                    res.status(400).json({message : err})
                } else {
                    next();
                }
            });
        } else {
            res.status(400).json({message : 'Please send a token'})
        }
    });
    
    //Escaping auth check
    users.get('/yourAPI6', function(req, res, next) {
        //Do your stuff
    });
    
    //Need auth for this
    users.get('/yourAPI7', checkAuth, function(req, res, next) {
        //Do your stuff
    });
    
    users.post('/yourAPI8', function(req, res, next) {
        //Do your stuff
    });
    
    users.post('/yourAPI9', checkAuth function(req, res, next) {
        //Do your stuff
    });
    
    users.put('/yourAPI10', function(req, res, next) {
        //Do your stuff
    });
    
    users.put('/yourAPI11', checkAuth function(req, res, next) {
        //Do your stuff
    });