Javascript Passportjs req.logout()在移动到单独的文件后不工作
我使用NodeJS和Express作为仪表板web应用程序的后端。我已经开始将后端服务器代码拆分成更小的文件(每个路由都在它自己的文件中)。我成功地拆分了登录函数,但是当我拆分注销函数时,这不仅会中断注销函数,还会中断登录函数 login.jsJavascript Passportjs req.logout()在移动到单独的文件后不工作,javascript,node.js,express,passport.js,Javascript,Node.js,Express,Passport.js,我使用NodeJS和Express作为仪表板web应用程序的后端。我已经开始将后端服务器代码拆分成更小的文件(每个路由都在它自己的文件中)。我成功地拆分了登录函数,但是当我拆分注销函数时,这不仅会中断注销函数,还会中断登录函数 login.js module.exports = function (passport) { const express = require('express'), router = express.Router(); //Login router
module.exports = function (passport) {
const express = require('express'),
router = express.Router();
//Login
router.post('/login', (req, res, next) => {
passport.authenticate('local', (err, user, info) => {
if (err) {
return next(err);
}
if (!user) {
return res.status(400).send([user, 'Cannot log in', info]);
}
req.login(user, err => {
res.send('Logged in');
console.log('User logged in');
});
})(req, res, next);
});
return router;
};
logout.js
module.exports = function () {
const express = require('express'),
router = express.Router();
//Logout
router.get('/logout', function (req, res) {
req.logout();
console.log('Logged out');
return res.send();
});
return router;
};
在index.js中需要/使用
const loginRoute = require('./routes/login.js')(passport);
exprApp.use('/api', loginRoute);
const logoutRoute = require('./routes/logout.js');
exprApp.use('/api', logoutRoute);
当logout.js没有被拆分时,login.js的工作原理与以前相同,因此我认为问题不在这里。也许是因为res.send从来没有真正发送到前端,所以它从来没有到达前端。然后呢?有人知道如何解决这个问题吗
编辑:我正在前端使用Vue。下面是处理响应的代码。它似乎从未到达回调,因此router.push等不会执行,只是挂起
logOut: ({commit}) => {
axios.get("/api/logout")
.then(() => {
router.push("/");
commit('RESET_USER');
commit('RESET_DEALERSHIPS');
commit('RESET_LEADS');
})
.catch((errors) => {
console.log(errors);
});
}
logout.js中的“注销”文本被记录到浏览器的控制台,因此端点必须存在并且前端可以访问(并且不会记录错误)。我只需更改行即可解决此问题
exprApp.use('/api/logout', logoutRoute);
到
我不知道为什么会这样,但它解决了这个问题。作为旁注,如果我将loginRoute更改为同时使用括号,我将从Node收到一个错误。您所说的“中断注销功能”是什么意思?出现任何错误?通过快速测试,您不能重复使用具有相同路径的路由。多次定义
/api
只会使用第一个。我在原始问题中添加了一些额外的细节。定义不同的路径解决了登录问题,但注销仍然无法正常工作(从未调用router.push)。
exprApp.use('/api/logout', logoutRoute());