[Q&A] NodeJS 导包语法require("./xxxx")(passport); 如何把变量传入被导入的模块

101 阅读1分钟

在学习B站项目Vue+node.js 全栈项目-资金管理系统带权限-------附源码_哔哩哔哩_bilibili中,产生了一些疑问。我的习惯是白天保证学习进度,并记录产生的问题;晚上再将这些问题一一解决。

一.目录

  • require("./config/passport")(passport);怎么把变量传入被导入的模块?
  • model("users") 为什么只要一个字符串参数?
  • passport 和 passport-jwt 详细流转结构?

二. Q&A

1. require("xxx")(param);写法,是怎么把变量传入被导入的模块的?

stateDiagram-v2 知识点 
Node.js --> Node.js模块
Node.js模块 --> Node.js_require模块

Question:

遇到一种写法如下图,目的是将之前导入的 passport 对象传到./config/passport.js文件夹下。

code1.png

Answer:

首先,之所以能将passport作为一个参数传入文件./config/passport.js中,是因为我们在./config/passport.js是这样定义module.exports的:

code1.png

./config/passport.js文件导出的是一个函数(只不过简写为箭头函数的形式),要求传入一个形参。因此我们在外部文件中可以将passport传进去。同时将这整个./config/passport.js导入到主文件。

2.model("users") 为什么只要一个字符串参数?

stateDiagram-v2 知识点 
Node.js --> mongoose
MongoDB --> mongoose
mongoose --> Mongoose.prototype.model()

Question:

关于mongoose.model()的用法?

Answer:

Mongoose API docs Mongoose-model()中是这么描述的:“参数带schema就创建,只有name就检索这个collection”

image.png

PS: mongoose 中文 API 文档竟然比英文 API 文档少Mongoose一部分。

3.JWT中间件 passport 和 jwt 策略passport-jwt 的具体流转?

stateDiagram-v2 知识点 
Node.js --> Web开发
Web开发 --> passport
passport --> passport_jwt
passport_jwt --> options,一个对象,控制如何从请求中提取或验证令牌的选项
passport_jwt --> verify,一个回调函数,返回

image.png

相关链接:
passport.js 的认证流程(authenticate flow)