Javascript 如何加上「;“授权”;检查选择性API';他在哪里?
我有一个基于react+节点的项目,我在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
dist/
目录中构建所有基于react的组件,然后将此目录上载到服务器,并通过nodeJSexpress.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种方式执行:
GET
API注意:仅当您使用GET
加载HTML页面,而不是像搜索任何其他信息那样获取数据时,才使用此选项。在所有这些中,我更喜欢第三个,因为它可以让您灵活地将其作为一个函数使用,并且可以在任何需要它的地方使用 如果只需要检查某些特定API的身份验证,可以通过以下3种方式执行:
GET
API注意:仅当您使用GET
加载HTML页面,而不是像搜索任何其他信息那样获取数据时,才使用此选项。在所有这些中,我更喜欢第三个,因为它可以让您灵活地将其作为一个函数使用,并且可以在任何需要它的地方使用 我是否必须给出静态路径<代码>服务器。使用('/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
});