0%

Node.js

Node.js

知识点

  • 模块系统
    • 核心模块
    • 第三方模块
    • 自己写的模块
  • npm
  • package.json
  • Express
    • 第三方Web开发框架
    • 高度封装了http模块
    • 更加专注于业务,而非底层细节
    • 知其所以然
  • 增删改查
    • 使用文件来保存数据(锻炼异步编码)
  • MongoDB
    • 所有方法都封装好了

软件开发版本介绍

x(新增功能比较多,甚至可能去除了某些功能).x(加入了新功能).x(修复bug,提升性能)

第三方模块

  • 凡是第三方模块都必须通过npm来下载
  • 使用的时候可以通过require('包名')的方式来进行加载才可以使用
  • 不可能有任何一个第三方包和核心模块名字是一样的
  • 既不是核心模块、也不是路径形式的模块
    • 先找到当前文件所处目录的node_modules目录
    • node_modules/art-template
    • node_modules/art-template/package.json文件
    • node_modules/art-template/package.json文件中的main属性
    • main属性中就记录了art-template的入口模块,然后加载使用这个第三方包,实际上最终加载的还是文件
    • 如果package.json文件不存在或者main指定的入口模块是也没有则node会自动找该目录下的index.js,也就是说,index.js会作为一个默认备选项
    • 如果以上所有条件都不成立,则会进入上一级目录中的node_modules目录查找,如果上一级还是没有,则继续往上上级查找,以此类推,如果直到当前磁盘根目录还找不到,则报错。
  • 注意:一个项目有且只有一个node_modules,放在项目根目录中,这样的话项目中所有的子目录都可以加载到

模块查找机制

  • 优先从缓存加载
  • 核心模块
  • 路径形式的文件模块
  • 第三方模块

package.json

建议每个项目都要有一个package.json文件(包描述文件,就像产品说明书一样)

这个文件可能通过npm init 的方式来创建

通过npm安装jquery,并在package.json中添加dependencies信息

npm install jquery --save

如果已经存在package.json文件,并且node_modules删除了,使用npm install 就会自动把package.json中的dependencies中的所有依赖项下载回来。

npm

node package manager

  • 查看版本

    1
    npm --version
  • 升级npm

    1
    npm install --global npm

常用命令

  • npm init
    • npm init -y 可以跳过向导,快速生成
  • npm install(npm i)
    • 将dependencies中所有依赖项全部安装
  • npm install 包名(npm i 包名)
    • 仅下载
  • npm install --save 包名(npm i -S 包名)
    • 下载并保存依赖项(package.json文件中)
  • npm uninstall 包名(npm un 包名)
    • 只删除,如果有依赖项会依然保存
  • npm unstall --save 包名(npm un -S 包名)
    • 删除同时,依赖项信息也删除
  • npm --help
    • 查看使用帮助
  • npm 命令 --help
    • 查看指定命令的使用帮助

Express

安装

1
npm i express --save

代码基本结构

1
2
3
4
5
6
7
8
9
10
11
 var express = require('express')
// 相当于http.createServer()
var app = express()
// 响应get请求
app.get('/',function(req,res){
res.send('hello')
})

app.listen(3000,function(){
console.log('Express app is running')
})

实现热更新

使用一个第三方工具nodemon实现,nodemon是一个基于node.js开发的一个第三方命令行工具,我们使用的时候需要独立安装:

1
npm install nodemon -G

安装完后,使用nodemon启动:

1
nodemon app.js

只要通过nodemon app.js启动服务,则它会监视文件变化,当文件发生变化时,会自动重启服务器

静态服务

1
2
3
4
5
// 使用静态资源
// 1. 推荐 使用http://127.0.0.1:3000/public/a.html访问
app.use('/public/',express.static('./public/'))
// 2. 使用http://127.0.0.1:3000/a.html访问
app.use(express.static('./public/'))

Express中使用art-template

安装

1
2
npm install art-template --save
npm install express-art-template --save

配置

1
2
3
4
 // 配置使用art-template模板引擎
// 第一个参数表示当渲染以.art结尾的文件时,使用art-template模板引擎
// express-art-template是专门用来在Express中把art-template整合到Express中
app.engine('art',require('express-art-template'))

使用

1
2
3
4
5
6
7
8
9
10
11
12
app.get('/',function(req,res){
res.render('index.html',{
title:'hello'
})
})
// Express 为Response对象提供了一个方法:render
// render方法默认是不可使用的,但如果配置了模板引擎就可以使用
// res.render('html模板名',{模板数据})
// 第一个参数不能写路径,默认会去项目中的views目录查找该模板文件
// 也就是说Express有一个约定:开发人员把所有的视图文件都放在views目录中
// 如果要修改默认的views目录,则可以
// app.set('views',render函数的默认路径)

在Express中获取表单POST请求数据

在express中没有内置获取表单POST请求体的API,这里需要使用第三方包:body-parser

安装

1
npm install body-parser --save

配置

1
2
3
4
5
6
7
8
// 引包
var bodyParser = require('body-parser')

// 配置body-parser
// 只要加入这个配置,则在req请求对象上会多出一个属性:body
// 即 可以直接通过req.body来获取表单POST请求数据
app.use(bodyParser.urlencoded({extended:false}))
app.use(bodyParser.json())

获取数据

1
2
3
4
5
6
7
8
9
10
app.post('/post',function(req,res){
// 1. 获取表单post请求体数据
// req.query只能拿get请求参数
// 使用第三方插件 body-parser
console.log(req.body)
console.log(req.body.content)
// 2. 处理
// 3. 发送响应
res.send(JSON.stringify(req.body, null, 2))
})