【问题标题】:How is this Code Refactor Not Equivalent?这个代码重构如何不等效?
【发布时间】:2020-07-28 12:56:42
【问题描述】:

我只是没有看到这个重构的代码是不等价的。前者按预期工作,后者返回 404。

登录成功:

router.post('/login', passport.authenticate('local'), (req, res) => {
  var userInfo = { username: req.user.username };
  res.send(userInfo);
});

错误xhr.js:178 POST http://localhost:3000/user/login/ 404 (Not Found) 抛出:

const authController = require('./controllers/authController');
    
router.post('/login', authController.login);

authController 在哪里:

const mongoose = require('mongoose');
const User = require('../models/User');
const passport = require('../passport');

exports.login = passport.authenticate('local'), (req, res) => {
  var userInfo = { username: req.user.username };
  res.send(userInfo);
}

两种情况下的请求头完全相同。

我错过了什么?

【问题讨论】:

  • 您需要了解逗号运算符的作用。你不能只用一个来替换两个参数。
  • 你的第一个 sn-p 是给 post 三个参数。您重构的代码给出了两个。
  • 我很惊讶代码没有给你错误Uncaught SyntaxError: Unexpected token '('猜测你需要检查服务器日志。
  • 谢谢大家。是时候离开屏幕了。

标签: javascript passport.js mern passport-local


【解决方案1】:

您正试图用一个来替换两个参数。逗号运算符不是这样工作的。您需要公开两个导出。

const authController = require('./controllers/authController');
router.post('/login', authController.authLocal, authController.login);

你的出口将是

const mongoose = require('mongoose');
const User = require('../models/User');
const passport = require('../passport');

exports.authLocal = passport.authenticate('local');
exports.login = (req, res) => {
  var userInfo = { username: req.user.username };
  res.send(userInfo);
}

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    相关资源
    最近更新 更多