node.js中模块的概念
前端开发中中js和js文件之间不能相互关联,但是在nodejs中exports和require可以将他们相互关联起来。
概念
狭义的说,每一个JavaScript文件都是一个模块;而多个JavaScript文件之间可以相互require,他们共同实现了一个功能,他们整体对外,又称为一个广义上的模块。
Node.js中,一个JavaScript文件中定义的变量、函数,都只在这个文件内部有效。当需要从模块外部引用这些变量、函数时,必须使用exports对象进行暴露。使用者要用require()命令引用这个JS文件。
一个JavaScript文件,可以向外exports无数个变量、函数。但是require的时候,仅仅需要require这个JS文件一次。使用的它保罗的变量、函数的时候,用点语法即可。所以,无形之中,增加了一个顶层命名空间。
js文件和js文件之间有两种合作的模式:
1) 某一个js文件中,提供了函数,供别人使用。 只需要暴露函数就行了; exports.msg=msg;
2) 某一个js文件,描述了一个类。 module.exports = People;
1 | ./text/people.js |
如果在require命令中,这么写:
1var foo = require(“foo.js”); //没有写./, 所以不是一个相对路径。是一个特殊的路径
那么Node.js将该文件视为node_modules目录下的一个文件
我们可以使用文件夹来管理模块,比如
1var bar = require(“bar”);
那么Node.js将会去寻找node_modules目录下的bar文件夹中的index.js去执行。
每一个模块文件夹中,推荐都写一个package.json文件,这个文件的名字不能改。node将自动读取里面的配置。有一个main项,就是入口文件:
1 | 1{ |
package.json文件,要放到模块文件夹的根目录去。
require()中的路径,是从当前这个js文件出发,找到别人。而fs是从命令提示符找到别人。
post请求
node.js追求一种极致,它认为post请求数据量会很大,所以会将数据拆分成很对小数据块chunk,然后通过特定的时间,将小数据块一个个传回来。
原生写POST处理,比较复杂,要写两个监听。文件上传业务比较难写。所以,用第三方模块。formidable。formidable是一个强大的封装模块,可以帮助实现文件上传的功能。