Node.js是什么?
首先呢,node.js并不是编程语言,也不是框架与库,它是一个javascript运行时环境,能解析与执行javascript代码,是构建于Chrome V8 Javascript引擎之上的,从技术角度,它的能力与Java,PHP,Python等服务端技术类似
Node的特点
- 事件驱动
- 非阻塞IO(异步)模型
- 单线程
- 跨平台
我为什么要学习node
从事前端开发有个几年了,一直想要自己开发维护一个网站,写接口成了大难题,采用node写接口的话,更适合于前端开发人员,node也能让自己对于Javascript的理解更深一层
起步
安装node环境的话,去NodeJS官网下载稳定版的就可以,整个安装的过程是一路点下去就行,安装完了确认下安装上了就可以开始我们的node之旅了
直接文件读取写入走起,感受下node的魅力
const fs = require('fs');
//读取文件
fs.readFile('./index.js', (err, data) => {
if (err) throw err
console.log(data)
})
const fs = require('fs');
//写入文件
fs.writeFile('./message.text','Hello World',err=>{
if(err) throw err
console.log('ok')
})
新建个js文件,然后命令行node启动这个文件即可
这里我们require的fs是什么呢,可能刚接触node的小伙伴并不知道,这里解释下,fs,是node的内置模块,也就是核心模块,node是模块化开发的,因为本身javascript是一直没有模块体系的(module),无法将一个大程序拆分成互相依赖的肖文杰,然后再用简洁的方法拼接起来,其他语言有这项功能,比如python的import,Ruby的require,css都有@import,但是node是多模块开发的
模块通信规则
require模块导入
// 核心模块
const fs = require('fs')
// 第三方模块
// npm install marked
const marked = require('marked')
// 用户模块(自己写的),正确的,正确的方式
// 注意:加载自己写的模块,相对路径不能省略 ./
const foo = require('./foo.js')
// 用户模块(自己写的),正确的(推荐),可以省略后缀名 .js
const foo = require('./foo')
exports模块导出
// 导出多个成员:写法一(麻烦,不推荐)
module.exports.a = 123
module.exports.b = 456
module.exports.c = 789
//Node 为了降低开发人员的痛苦,所以为 module.exports 提供了一个别名 exports (下面协大等价于上面的写法)。
//导出多个成员:写法二(推荐)
console.log(exports === module.exports) // => true
exports.a = 123
exports.b = 456
exports.c = 789
exports.fn = function () {
}
上面是导出多个成员的例子,是可以省略module的,但是只导出一个成员的话,是不可以省略module的
// 导出单个成员:不可以省略module
module.exports = function (x, y) {
return x + y
}
为什么不能省略module?因为每个模块内部有个module对象,module对象上有个成员exports也是一个对象,模块中同时还有一个成员exports等价于module.exports
模块分类
核心模块
- 核心模块就是node内置的模块,需要通过唯一的标识名称来进行获取的
- 每一个核心模块基本上都是暴露了一个对象,里面有一些方法供我们使用,具体的api可以去官网查找使用
- 在导入核心模块的本质也是文件模块,已经被编译到了node的可执行程序中,基于CommonJS模块规范
- 常用的核心模块名称与作用
模块名称 | 作用 |
---|---|
fs | 文件操作 |
http | 网络操作 |
path | 路径操作 |
url | url地址操作 |
os | 操作系统信息 |
net | 一种更底层的网络操作方式 |
querystring | 解析查询字符串 |
util | 工具函数模块 |
文件模块
一般指用户自己编写的模块
第三方模块
一般通过npm安装的模块就是第三方模块
加载规则如下:
- 如果不是文件模块,也不是核心模块
- node 会去 node_modules 目录中找(找跟你引用的名称一样的目录),例如这里
require('underscore')
- 如果在 node_modules 目录中找到
underscore
目录,则找该目录下的package.json
文件 - 如果找到
package.json
文件,则找该文件中的main
属性,拿到 main 指定的入口模块 - 如果过程都找不到,node 则取上一级目录下找
node_modules
目录,规则同上。。。 - 如果一直找到代码文件的根路径还找不到,则报错。。。
注意:对于第三方模块,我们都是 npm install
命令进行下载的,就放到项目根目录下的 node_modules
目录。
基于node.js的服务端开发任重而道远,一步一个脚印,觉得有用的可以点个赞,感谢
网友评论