Module.exports并要求混淆

时间:2018-08-12 21:46:42

标签: node.js oauth requirejs

我正在上Udemy的Stephen Grinders MERN课程。本课程共有三个文件。我对节点模块的理解是它独立运行,这就是为什么我们需要将模块需要的所有内容导入模块内部的原因。我的问题是:

为什么在authRoutes.js文件中我们不需要导入passport.js文件?我们正在使用passport.authenticate函数是authRoutes.js文件,未在模块中对其进行配置。

index.js

const express = require('express');
require('./services/passport')
const app = express();

require('./Routes/authRoutes')(app);


const PORT = process.env.PORT || 3000;
app.listen(PORT);

passport.js

const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const keys=require('../config/keys')

passport.use(new GoogleStrategy(
    {
    clientID:keys.googleClientID,
    clientSecret:keys.googleClientSecret,
    callbackURL:'/auth/google/callback'
},(accessToken,refreshToken,profile,done)=>{
    console.log(`${accessToken}, ${refreshToken}, ${profile.displayName}`)
}
));

authRoutes.js

const passport = require('passport');

module.exports=app=>{
    app.get('/auth/google',passport.authenticate('google',{
        scope:['profile','email']
    }))

    app.get('/auth/google/callback',passport.authenticate('google'))

}

1 个答案:

答案 0 :(得分:0)

passport.js 配置Passport,在使用Passport之前有必要进行配置。在 authRoutes.js 之前和在其中实际使用Passport之前,将 passport.js 导入 index.js 中。

  

为什么在authRoutes.js文件中我们不需要导入passport.js文件?

如果 passport.js 正在导出 authRoutes.js 需要的内容,则将需要此设置。但是它不会导出任何内容,只是更改passport包的内部状态-在 passport.js authRoutes.js 中是相同的。

  

我对节点模块的理解是它独立运行,这就是为什么我们需要将模块需要的所有内容导入模块内部的原因。

这样做是为了建立模块依赖关系的层次结构。因为实际上是 authRoutes.js 依赖于Passport,所以在此处导入 passport.js 而不是在 index.js 中导入可能更合理。