Node

Node是基于V8(谷歌浏览器引擎)下的一个JavaScript运行环境,让JavaScript变成服务器端语言。其本身可以单独启动服务,类似Nginx,但不如Nginx强大,配合使用就类似于Tomcat + Java更加完美;由于异步机制,在I(Input 输入) O(Output 输出)方面有极大优势。Node主要根据CommenJs定义的服务端规范来实现其功能。

常用全局对象

Node内置对象非常多,以下列举一些常用的对象及API

fs(File System)

文件操作对象

  • fs.readFileSync(path) 同步读取文件
  • fs.readFile(path) 异步读取文件
  • fs.readdirSync(path) 同步读取目录
  • fs.readdir(path) 异步读取目录
  • fs.accessSync(path, fs.constants.F_OK) 判断路径是否存在
  • fs.statSync(path[, options]) 返回一个fs.Stats对象

Process

系统进程对象

  • process.argv 获取node参数
  • process.env 获取环境变量

__filename

文件绝对路径

__dirname

文件夹绝对路径

Path

路径操作对象

  • path.join(path, file) 路径拼接
  • path.parse(path) 路径解析为对象
    • base 修改文件名或后缀
  • path.solve()
  • path.resolve(path) 修复路径

Query String

请求参数字符串对象

  • querystring.parse(str) 将字符串转化为对象

HTTP

HTTP协议对象,Node服务器核心

  • http.createServer() 创建服务器
    • server.on() 基于事件绑定
      • request(req, res) 请求事件触发
        • req 请求报文
          • req.headers 请求头
          • req.url 请求url
          • req.method 请求方法
        • res 响应报文
          • res.setHeader() 一次设置响应头
          • res.writeHead() 多次设置响应头
          • res.write() 多次设置响应内容
          • res.end(); 一次设置响应内容
          • res.redirect(); 重定向
    • server.listen(80) 监听服务器端口80

简单服务器代码演示:

  1. // 引入核心http
  2. const http = require('http');
  3. // 创建服务器
  4. let server = http.createServer();
  5. // 为服务器绑定请求事件
  6. server.on('request',(req,res) => {
  7. // 设置cookie
  8. res.setHeader('set-cookie','123');
  9. // 设置响应头
  10. res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
  11. // 设置多次响应内容
  12. res.write('111');
  13. // 最终一次响应内容
  14. res.end('bilibili');
  15. });
  16. // 监听服务器
  17. server.listen(8080,()=>{
  18. console.log('服务器启动');
  19. });

NPM

NPM是Node的包管理工具,管理Node各种类型的工具包,其主要通过package.json来管理和配置文件依赖关系

npm基本操作:

  • npm init [-y] 创建描述包package.json
  • npm install package-name 下载包
    • 不加包名即修复依赖所缺包
    • —save or -S 记录依赖(dependencies)—生产
    • —save-dev or -D 记录依赖(devDependencies)—开发
    • —global or -g 全局安装
  • npm uninstall package-name 删除包
  • npm info package-name 查看包信息
    • versions 包版本信息
  • npm docs package-name 查看包的文档
  • npm root -g 查看全局包的下载路径

NRM

是npm的镜像源管理工具,用来切换NPM源

  • npm install -g nrm 全局安装
  • nrm ls 查看当前可选的镜像源
  • nrm use taobao 切换镜像源
  • nrm add name link 自己添加源

NPM如何识别包的

  1. 逐级向上查找node_module,直到盘符根目录
  2. 查找node_modules下的该包文件夹中package.json的main属性(通用,优先级最高)
  3. 查找node_modules下的包名.js(少见,优先级其次)
  4. 查找node_modules下的该包文件中的index.js(常用)

Express和Koa

基于node的http对象实现,对比自己原生起服务,Express帮我们省略很多步骤,加入中间件路由等。Koa由Express原作者开发,实现了ES7的async函数

简单使用演示:

  1. const express = require('express')
  2. const app = express()
  3. // 配置渲染引擎
  4. app.engine('.html',require('express-art-template'))
  5. // 设置环境
  6. app.set('view options', {
  7. debug: process.env.NODE_ENV !== 'production',
  8. })
  9. // 创建路由
  10. let router = express.Router()
  11. // 路由配置
  12. router.get('/', (req, res) => res.send('Hello World! this is get'))
  13. .post('*', (req, res) => res.send('Hello World! this is post'))
  14. .all('*', (req, res) => res.send('404 Not Find!'))
  15. // 处理静态资源
  16. app.use(express.static('./public'))
  17. // 使用路由
  18. app.use(router)
  19. // 监听端口
  20. app.listen(3000, () => console.log('Example app listening on port 3000!'))