Dea*_*ose 1 javascript node.js
我有一个基于react + node的项目,我在dist/目录中构建所有基于反应的组件,然后将此目录上传到服务器并通过nodeJS express.static()方法提供.
server.use(express.static(__ 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'})
}
})
Run Code Online (Sandbox Code Playgroud)
但是现在我面临的问题是,当我运行URL时http://localhost:3001/dashboard,节点中间件也会捕获它并检查令牌而不是渲染我的webview.
如何在nodeJS中区分webview请求和其他服务器请求
如果您需要仅针对某些特定API检查auth,您可以通过以下3种方式执行:
`
users.get('/yourAPI1', function(req, res, next) {
//Do your stuff
});
users.get('/yourAPI2', function(req, res, next) {
//Do your stuff
});
users.get('/yourAPI3', function(req, res, next) {
//Do your stuff
});
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'})
}
});
//Now those functions which need auth checks
users.post('/yourAPI4', function(req, res, next) {
//Do your stuff
});
users.post('/yourAPI5', function(req, res, next) {
//Do your stuff
});
Run Code Online (Sandbox Code Playgroud)
`
GETAPI.注意:仅当您用于GET加载HTML页面而不是获取搜索任何其他信息等数据时,才使用此选项.`
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'})
}
});
Run Code Online (Sandbox Code Playgroud)
`
`
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
});
Run Code Online (Sandbox Code Playgroud)
`
在所有这些中,我会更喜欢第三个,因为它为您提供了灵活性,可以在任何需要的地方使用.
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |