目录
第一章 认识Node.js
1.1 安装node
1.2 node示例
1.3 第一个node程序
1.4 Supervisor介绍
1.5 nrm和nvm介绍
第二章 Node.js基础知识
2.1 web应用和第一个express应用
2.2 Route介绍和使用
2.3 express路由演示
2.4 express路由API使用(一)
2.5 express路由API使用(二)
2.6 路由拆分
2.7 中间件
2.8 异常处理
2.9 MySQL
2.10 Sequelize介绍和使用
第三章 从实战中熟悉操作
3.1 需求分析
3.2 API设计
3.3 模型创建
3.4 API里面具体使用ORM模型
3.5 运维和发布
第四章:总结与问题归纳
4.1 总结
4.2 问题归纳
第一章 认识Node.js
1.1 安装node
http://nodejs.cn/download/
检验是否安装完成
打开终端输入以下命令,是否出现版本号
1.2 node示例
const os = require('os');
console.log(cpus.length);
const total = os.totalmem();
console.log(total/1024/1024/1024);
const free = os.freemem();
console.log(free/1024/1024/1024);
运行程序
终端输入
node demo.js(文件名)
1.3 第一个node程序
const http = require('http');
const hostname = '127.0.0.1';
const server = http.createServer((req,res)=>{
res.setHeader('Content-Type','text/plain');
server.listen(port,hostname,()=>{
console.log(`服务启动成功,监听端口:${port}`)
页面上返回如下
终端打印如下
1.4 Supervisor介绍
我们一般都是编写代码边调试,这个过程很繁琐,Supervisor是个工具,可以帮我们自动检测代码的变化,重启服务
全局安装supervisor
npm install supervisor -g
安装完成启动项目使用
supervisor base.js(文件名)
1.5 nrm和nvm介绍
nrm管理npm源
nrm add <registry> <url> [home]
安装nrm
npm install nrm -g
nvm管理node.js版本
nvm ls
第二章 Node.js基础知识
2.1 web应用和第一个express应用
web应用
ajax,websockt --> 服务器(web应用) --> 缓存/数据库
通过ajax或者其他方法请求web应用获取数据
express框架
express
接收 req,处理 res
是node中的一种web框架
首先需要先安装express
const express = require('express');
app.get('/name/:age',(req,res)=>{
app.post('/name',(req,res)=>{
app.all('/name',(req,res)=>{
res.send('tom all methods')
console.log('server 启动成功')
2.2 Route介绍和使用
web服务如何处理一个请求?
url --> 网络 --> dns解析 --> 目标服务器
如何响应这个请求 --> 路由//规则
1. 请求方法来区分
- get --> 响应
- post --> 响应
2.通过uri --> 路径区分(域名后面的路径)
www.baidu.com/a/b/c.html
2.3 express路由演示
路由的区分实例
请求方法区分
app.get('/demo',(req,res)=>{
message:'hello express route from get demo'
app.post('/demo',(req,res)=>{
message:'hello express route from post demo'
uri 区分
app.get('/user/byname',(req,res)=>{
app.get('/user/byid',(req,res)=>{
2.4 express路由API使用(一)
1:需要定义一个api/路由,需要满足客户端无论使用什么请求方式都可以得到响应
app.all('/demo',(req,res)=>{
2:无论客户端使用任何的uri,我们的服务器都可以响应--> 日志
2.5 express路由API使用(二)
app.use --> 使用中间件(可以用来写路由,但是尽量写中间件,因为路由也属于中间件)
app.use('/demo',(req,res)=>{
app.use('/demo',(req,res)=>{
2.6 路由拆分
member
sku
order
这三个路由都有一个子路由list
- 定义一个文件
member.router.js
2. 在该文件中写入所要处理的子路由(包括express框架)
const router = express.Router();
router.get('/list',(req,res)=>{
3. 进入入口文件(app.js)注册路由
const memberRouter = require('./member.router');
const skuRouter = require('./sku.router');
app.use('/member',memberRouter)
app.use('/sku',memberRouter)
2.7 中间件
什么是express中间件
- 是一个函数
- 有四个参数(err,req,res,next),next是个回调
function demo_middleware(err,req,res,next){
app.all('*',valid_name_middleware)
app.get('/test',(req,res)=>{
function valid_name_middleware(req,res,next){
if(!name || !name.length){
内置中间件和第三方中间件介绍
使用方式:
- app级别
-
注册的时候,一定在最顶级
-
app.use --> api去加载进来
function log_middleware(req,res,next){
app.use(express.static('static',{
extensions:['html','htm']
2.router级别
router.use(function(req,res,next){
console.log('log from router');
function vlaid_login_params(req,res,next){
let {name,password} = req.query;
router.get('/login',[],(req,res)=>{
3.异常处理-->app级别-->router级别
自定义中间件
2.8 异常处理
异常捕获
express内置异常处理
自定义异常处理
app.get('/demo',(req,res)=>{
throw new Error('测试异常功能')
function demo_middleware(req,res,next){
function error_handler_middleware(err,req,res,next){
message:`${message || '服务器异常'}`
function not_found_handler(req,res,next){
app.use(not_found_handler)
app.use(error_handler_middleware)
2.9 MySQL
结构化数据库中的一种
是一个服务,提供了数据存放的服务
mysql的安装
2.10 Sequelize介绍和使用
安装sequelize
npm install sequelize-cli -S
初始化完成会生成如下文件
modeules ORM里面的每个模块会跟我们的项目关联
修改config配置文件
"database": "database_development",
npx sequelize-cli model:generate --name User --attributes name:string
完成之后
models目录下会多一个user.js文件
migrations目录下会多一个文件,这个文件就是用来创建表
const models = require('../models/');
npx sequelize-cli db:migrate --env=development
app.get('/create',async (req,res)=>{
let user = await models.User.create({
app.get('/list',async (req,res)=>{
let list = await models.User.findAll();
app.get('/detail/:id',async (req,res)=>{
let user = await models.User.findOne({
第三章 从实战中熟悉操作
3.1 需求分析
第一步根据用户所提出来的需求进行分析,这一步很重要,分析完成才可以设计你的API
主要分析需要传进来什么参数,实现什么功能
3.2 API设计
- 创建项目目录
- 初始化npm
npm init
3.安装依赖
npm install express mysql2 sequelize supervisor sequelize-cli body-parser -S
4.先把框架写出来
const express = require('express');
const bodyParser = require('body-parser');
app.use(express.urlencoded());
app.use(bodyParser.urlencoded({extended: true}));
5.异常处理,所有的错误,http status == 500
app.use((err,req,res,next)=>{
6.API的设计
app.get('/list/:status/:page',async (req,res,next)=>{
app.post('/create',async (req,res,next)=>{
let { name,deadline,content } = req.body;
app.post('/update',async (req,res,next)=>{
let { name,deadline,content,id } = req.body;
app.post('/update_status',async (req,res,next)=>{
let { id,status } = req.body;
3.3 模型创建
1.数据库的初始化
使用`sequelize-cli`初始化项目的数据库配置信息 `npx sequelize init`(建议新建一个目录)
`npx sequelize model:generate --name Todo --attributes name:string,deadline:date,conten:string`
`npx sequelize db:migrate`
2.API里面具体使用ORM模型
3.4 API里面具体使用ORM模型
const models = require('../db/models');
app.post('/create',async (req,res,next)=>{
let { name,deadline,content } = req.body;
let todo = await models.Todo.create({
app.post('/update',async (req,res,next)=>{
let { name,deadline,content,id } = req.body;
let todo = await models.Todo.findOne({
todo = await todo.update({
app.post('/update_status',async (req,res,next)=>{
let { id,status } = req.body;
let todo = await models.Todo.findOne({
if(todo && status != todo.status){
todo = await todo.update({
3.5 运维和发布
服务要启动在后台,不能在窗口
pm2工具
ecosystem.config.js文件中apps可以有多个应用
第四章:总结与问题归纳
4.1 总结
web框架,express、hapi、koa、egg
web-->webserver-->router-->hander-->orm--db
4.2 问题归纳
注意:一旦删除了自带的createdAt和updatedAt两个字段,需要做出如下设置
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
User.associate = function(models) {
修改字段默认值
const User = sequelize.define('User', {