目录
如实现一个登陆功能:
web层: logincontroller接受参数,判断是否非法,然后传给服务层
服务层: loginservice通过dao层从数据库获取数据,拿到user和收到的数据进行比对,
dao层: 从数据库获取数据并转换为对象
domain: user对象实体
需要遵循单一职责原则
nodejs的npm包管理工具能解决这些缺陷(从中央仓库下载)
node引入系统自带模块时,直接require模块名即可,如果是自己的模块,则需要带上路径:
系统自带的文件: require("http"); 用户自定义文件: require("./src/index.js");
想要在另一个文件中引入当前文件的变量,则需要在本文件中将其导出:
导出:module.export = a; //如果导出多个请使用对象 或者使用:exports a; 引入: let a = import("./test.js"); console.log(a)
因此,应尽量使用module.exports而避免使用exports来导出
我们可以直接使用rquire exports module __dirname __filename等这些非系统模块,他们是在哪里定义的?
这些都是属于nodejs的模块,而nodejs的模块是运行在一个函数之中的,这个函数拥有一些参数,其中包含module等,而我们所写的内容在这个函数体的中间部分,大致长这样:
function nodemodule(module,exports,reqiure,__filename,__dirname){ ---------- 我们所写的内容 ---------- return module.export }
我们之所以能用这些模块,是因为被当做参数传进来了,并且返回的是module.exports,这也就是为什么exports会失效了
上面提到模块是运行在一个函数内,且require等是被当做参数传递进来,那么我们可以尝试打印arguments,要知道arguments仅能在函数中起作用:
可以看出5个参数分别对应:exports,require,module,__filename,__dirname,可以使用arguments下标去分别验证(如argument[1]===require)
如对本文有疑问, 点击进行留言回复!!
MFC的静态库.lib、动态库.dll(包含引入库.lib)以及Unicode库示例
CTF 刷题记录(一) 白云新闻搜索(手动与自动化SQL注入)
javascript如何使用函数random来实现课堂随机点名方法详解
网友评论