Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.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 Passportjs req.logout()在移动到单独的文件后不工作_Javascript_Node.js_Express_Passport.js - Fatal编程技术网

Javascript Passportjs req.logout()在移动到单独的文件后不工作

Javascript 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

我使用NodeJS和Express作为仪表板web应用程序的后端。我已经开始将后端服务器代码拆分成更小的文件(每个路由都在它自己的文件中)。我成功地拆分了登录函数,但是当我拆分注销函数时,这不仅会中断注销函数,还会中断登录函数

login.js

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());