Node入门笔记

Node学习笔记

安装环境

  • 下载地址:https://nodejs.org/en/download
  • 安装
    • window 下载对应版本,按提示就可以
  • 确认是否安装成功
    • 打开命令行,输入node --version
    • 或者 node -v
  • 执行文件
    • 打开命令行,进入对应的文件夹。输入node hello.js

Node.js入门

Node中的javaScript

  • EcmaScript

  • 核心模块

  • 第三方模块

  • 用户自定义模块

Node中的模块系统

fs 文件操作模块
fs.readFile

var fs = require('fs');

/**
* @param path:文件路径 
* @param [charset]:读取字符格式 可以省略,默认为16进制格式
* @parm callback:回调函数
*/

fs.readFile('./views/index.html','utf-8',function(err,data){
    //通过判读err是否存在,判断文件是否读取失败
    if(err){
        return console.log('读取文件失败!');
    }
    
    return data;
})

fs.writeFile
var fs = require('fs');

/**
* @param path:文件路径
* @param data:存储数据
* @param callback:回调函数
*
*/
fs.writeFile('./db/data.json',{id:1,name:'xiao'},function(err){
    if(err){
        return console.log('文件存储失败');
    }
    
    console.log('文件存储成功');
});
http 网络模块
简单http服务实例
  • 方式一

    //引入http模块系统
    var http = require('http');
    
    //构建服务为
    var server = http.createServer();
    
    //监控服务信息交互
    server.on('request',function(requesst,response){
    	
    	response.end('hello world!');
    })
    
    //启动监控端口 第一个参数为监控端口
    server.listen(3000,function(){
    	console.log('Server 3000 Running....')
    })
    
    
  • 方式二(简化写法)

    //引入http模块系统
    var http = require('http');
    
    //构建服务
    http.createServer(function(request,response){
    	response.end('hello world!');
    }).listen(3000,function(){
    	console.log('Server 3000 Running....')
    })
    
    
url 地址格式化模块

通过npm安装常用工具

nodemon 自动重启工具
#安装
npm install --global nodemon
    
#查看版本
nodemon --version

#使用自定启动方式启动node.js文件
nodemon app.js

Express框架使用

安装

  • 官方说明文档 http://expressjs.com/en/starter/installing.html
  • 初始化目录npm init -y
  • npm安装express包npm install express --save

简单使用

  • 创建入口文件 app.js

    //引用express
    var express = require('express');
    
    //创建app对象
    var app = express();
    
    //开放访问资源文件夹
    app.use('/public/',express.static('./public/'));
    
    //get方式访问
    app.get('/',function(request,response){
    	response.send('Hello World!');
    })
    
    //post方式访问监控
    app.post('/',function(request,response){
    	response.send('Hello World!');
    })
    
    //启动监控端口
    app.listen(3000,function(){
    	console.log('Server 3000 Running....');
    })
    
    

Express中使用art-template

  • 安装相关依赖包

    • 安装art-template依赖包 npm install art-template --save
    • 安装express-art-tmplate依赖宝 npm install express-art-tmplate --save
  • 代码中注册依使用

    //引入相关依赖包
    var express = require('express');
    var fs = require('fs');
    
    //注册http服务
    var app = express();
    
    //注册art-template模板引擎
    app.engine('html',require('express-art-template'));
    
    //监控GET访问的 ‘/’路径
    app.get('/',function(request,response){
    	var students = [];
    	fs.readFile('','utf-8',function(err,data){
    		if(err){
    			return response.status(500).send('500 服务器错误');
    		}
    		// console.log(data);
            students = JSON.parse(data).students;
            response.render('index.html',{
                headerList:[
                        {name:'苹果',color:'#F00',des:'这是一个好吃的苹果'},
                        {name:'雪梨',color:'#fff906',des:'这是一个好吃的雪梨'},
                        {name:'西瓜',color:'#0F0',des:'这是一个好吃的西瓜'},
                        {name:'葡萄',color:'#ff0c6e',des:'这是一个好吃的葡萄'},
                        {name:'苹果',color:'#F00',des:'这是一个好吃的苹果'},
                        {name:'雪梨',color:'#fff906',des:'这是一个好吃的雪梨'},
                        {name:'西瓜',color:'#0F0',des:'这是一个好吃的西瓜'},
                        {name:'葡萄',color:'#ff0c6e',des:'这是一个好吃的葡萄'},
                    ],
                students:students,
            });	
    		
    	})
    });
    
    app.listen(3000,function(){
    	console.log('Server 3000 Running....');
    })
    
    
    

Express中的路由Rouster

  • 新建路由文件 router.js文件,文件内容如下

    //引入相关依赖包
    var express = require('express');
    var fs = require('fs');
    
    //注册路由容器
    var router = express.Router();
    
    //挂载相关路由
    router.get('/',function(request,response){
    	var students = [];
    	fs.readFile('./db/student.json','utf-8',function(err,data){
    		if(err){
    			return response.status(500).send('500 服务器错误');
    		}
    		
    		//把文件字符串内容转为json对象
    		students = JSON.parse(data).students;
    		
    		//通过art-template模板引擎进行渲染
    		response.render('index.html',{
    			students:students,
    		})
    		
    	})
    });
    
    module.exports = router;
    
    
  • 使用路由可以实现逻辑模块分离,入口app.js专注逻辑,引入路路由文件如下

    //引入相关依赖包
    var express = require('express');
    var router = require('./router');
    
    //创建http服务
    var app = express();
    
    //开放访问目录
    app.use('/public/',express.static('./public/'));
    app.use('/node_modules/',express.static('./node_modules/'));
    
    //注册art-template模板引擎
    app.engine('html',require('express-art-template'));
    
    
    //使用路由
    app.use(router);
    
    //开启监控端口
    app.listen(3000,function(){
    	console.log('Server 3000 Running....')
    });
    
    
    
    
  • 上述引入的./db/student.json文件内容如下

    {
      "students": [
        {"id":1 ,"name": "张三","age":18 ,"gender":0 ,"hobbies": "吃饭、睡觉、打豆豆"},
        {"id":2 ,"name": "李四","age":18 ,"gender":1 ,"hobbies": "吃饭、睡觉、打豆豆"},
        {"id":3 ,"name": "王五","age":18 ,"gender":0 ,"hobbies": "吃饭、睡觉、打豆豆"},
        {"id":4 ,"name": "赵六","age":18 ,"gender":0 ,"hobbies": "吃饭、睡觉、打豆豆"},
        {"id":5 ,"name": "钱七","age":18 ,"gender":1 ,"hobbies": "吃饭、睡觉、打豆豆"},
        {"id":6 ,"name": "牛八","age":18 ,"gender":0 ,"hobbies": "吃饭、睡觉、打豆豆"}
      ]
    }
    
    

Express中POST处理

  • 安装body-parser中间件

    • 安装 npm install body-parser --save
  • 使用说明文档 http://expressjs.com/en/resources/middleware/body-parser.html

  • 代码中注册使用

    var express = require('express')
    var bodyParser = require('body-parser')
    
    var app = express()
    
    // parse application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({ extended: false }))
    
    // parse application/json
    app.use(bodyParser.json())
    
    app.use(function (req, res) {
      res.setHeader('Content-Type', 'text/plain')
      res.write('you posted:\n')
      res.end(JSON.stringify(req.body, null, 2))
    })
    
    

MongoDB

安装

  • 下载地址: https://www.mongodb.com/download-center#community
  • 安安装步骤:根据提示,按下一步安装即可
  • 配置环境变量:把安装执行文件配置到电脑环境变量中;C:\Program Files\MongoDB\Server\3.6\bin;
  • 查看是否安装成功 命令行输入:mongod --version

入门

  • 参考菜鸟教程: https://www.runoob.com/mongodb/mongodb-tutorial.html

  • 启动

    #mongod 默认是由执行 mongod 命令所处盘符根目录下的 /data/db 作为自己的数据存储目录
    #所以在第一次执行该命令之前,先自己手动新建一个 /data/db目录
    #没有改目录执行 mongod 是会 shutting down with code:100 启动后关闭
    mongod 
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F5FKysMw-1571460653232)(C:\Users\rufeike\AppData\Roaming\Typora\typora-user-images\1571043604442.png)]

  • 修改存储路径

    mongod --dbpath=数据库存储目录路径
    
  • 关闭数据库 命令行直接 ctrl+c 即可停止

  • 连接和退出数据库

    • 连接

      #该命令默认连接本机的MongoDB 服务
      mongo
      
    • 退出

      #在连接状态下 输入 exit 回车即刻退出连接
      exit 
      

基本命令

  • 查看显示所以数据库

    show dbs
    
  • 查看当前操作的数据库

    db
    
  • 显示当前数据库的所有集合

    show collections
    
  • 查看数据表数据库

    db.数据库.find()
    
  • 切换数据库 (如果没有,则会创建数据库)

    use 数据库名称
    
  • 查看数据库

    show collections
    
  • 删除数据库

    db.数据库名.drop()
    

Node连接MongoDB

安装依赖
  • 使用官方mongodb包操作(不推荐使用,操作麻烦)

    https://github.com/mongodb/node-mongodb-native

  • ​ 使用第三方mongoose包来操作

    http://www.mongoosejs.net/

mongoose参考文档使用
  • 官方指南: http://www.mongoosejs.net/docs/guide.html
快速入门
连接说明
//引入相关依赖库
var mongoose = require('mongoose');

//连接数据库
mongoose.connect('mongodb://localhost/test',{ useNewUrlParser:true,useUnifiedTopology: true },function(err){
	if(err){
		return console.log('数据库连接失败');
	}
	
	console.log('数据库连接成功!');
});

//添加成功提醒和失败警告
var db = mongoose.connection;
db.on('error',console.error.bind(console.log,'connection error'));
db.on('open',function(){
   //写业务代码
   ....
})

入门案例
//使用前提已经安装node.js和mongodb数据库
//第一步:导入依赖包
var mongoose = require('mongoose');

//第二部:连接数据库test
mongoose.connect('mongodb//localhost/test');

//第三步:设置schema(集合结构)
var Schema = mongoose.Schema;
var userSchema = new Schema({
	username:{
		type:String,
		required:true
	},
	password:{
		type:String,
		required:true
	},
	email:{
		type:String
	}
});

//第四步:把文档结构发布为模型
/*
	mongoose.model('User',userSchema,[指定数据表]) 方法就是用来将一个Schema框架发布为model
	第一个参数:传入一个首字母大写的单数字符串用来表示数据库名称,mongoose会自动把该字符串生产小写复数的集合名称	
	第二个参数:用户表结构
	第三个参数:选填,可以指定表
	返回值:模型构造函数
	例如:User 最终变成 users 集合名称
*/
var User = mongoose.model('User',userSchema);

//第五步:使用model构造函数进行添加数据(实力化一条数据)
var admin = new User({
	username:'admin',
	password:'123456',
	email:'qq21323@qq.com'
})

//第六步:把数据库进行持久化(存入数据库)
admin.save(function(err,ret){
	if(err){
		console.log('保持失败');
	}else{
		console.log('保持成功');
		//ret为存储成功返回的对象
	}
})

关于Schema数据定义结构

方式一(属性直接赋值字符类型):

var Schema = mongoose.Schema;
var blogSchema = new Schema({
	title:String,
	author:String,
	body:String,
	comments:[{body:String,date:Date}],
	date:{type:Date,default:Date.now},
	hidden:Boolean,
	meta:{
		votes:Number,
		favs:Number
	}
});

方式 二(属性改成对象赋值):

var Schema = mongoose.Schema;
var blogSchema = new Schema({
	title:{
		type:String,//字符串格式
		require:ture,//必须填写
		default:0,//指定默认参数
		trim:true,//去左右空格
		lowercase:true,//转小写
		
	},
	author:{
		type:String,
		require:true
	},
	gander:{
		type:Number,
		default:0
	}
	...
});

Schema集合结构
预定义修饰符

trim、lowcase、uppercase

//引入依赖包
var mongoose = require('mongoose');
//连接数据库
mongoose.connect('mongodb://127.0.0.1:27017',{ useNewUrlParser:true,useUnifiedTopology: true },function(err){
    if(err){
        return console.log('数据库连接失败');
    }
    
    console.log('数据库连接成功');
})

//定义数据集合结构
var Schema = mongoose.Schema;

var userSchema = new Schema({
    username:{
        type:String,
        required:true,
        default:'',
        trim:true
    },
    password:{
        type:String,
        required:true,
        trim:true
    }
})

//发布为模板

var User = mongoose.model('User',userChema,'users');




自定义修饰符 setter
//引入依赖包
var mongoose = require('mongoose');

//连接数据库
mongoose.connect('mongodb://127.0.0.1:27017',{useNewUrlParser:true,useUnifiedTopology:true},function(err){
    if(err){
        return console.log('数据库连接失败');
    }
    console.log('数据库连接成功');
})

//定义数据表集合结构
var userSchema = mongoose.Schema({
    username:{
        type:String,
        required:true,
        set:function(params){
            return 'rufeike_'+params
        }
    },
    password:{
        type:String,
        requried:true
    }
})

添加索引
//引入依赖包
var mongoose = require('mongoose');

//连接数据库
mongoose.connect('mongodb://127.0.0.1:27017',{useNewUrlParser:true,useUnifiedTopology:true},function(err){
    if(err){
        return console.log('数据库连接失败');
    }
    console.log('数据库连接成功');
})

//定义数据表集合结构
var userSchema = mongoose.Schema({
    username:{
        type:String,
        required:true,
       	unique:true//唯一索引
    },
    password:{
        type:String,
        requried:true,
        index:true //主键索引
    }
})
数据校验
  • 内置校验

    • requeried:表示这个数据必须传入 true
    • match:正则规则,只能用在String类型中
    • min:用于Number 类型数据,最大值
    • max:用于Number 类型数据,最小值
    • enum:枚举类型,要求数据必须满足枚举值 enum:[‘0’,‘1’,‘2’],只能用在String类型
    • maxlength:最大长度,只能用在String类型
    • minlenght:最小长度,只能用在String类型

    match正则用法示例:

    //引入依赖包
    var mongoose = require('mongoose');
    
    //连接数据库
    mongoose.connect('mongodb://127.0.0.1:27017',{},function(err){
        if(err){
            return console.log('数据库连接失败');
        }
        console.log('数据库连接成功');
    })
    
    //定义数据表集合结构
    var userSchema = mongoose.Schema({
        username:{
            type:String,
            required:true,
           	match:/^sn(.*)/ //数据必须与sn字符开头
        },
        password:{
            type:String,
            requried:true
        }
        .....
    })
    
  • 自定义校验

    validate实例

    //引入依赖包
    var mongoose = require('mongoose');
    
    //连接数据库
    mongoose.connect('mongodb://127.0.0.1:27017',{},function(err){
        if(err){
            return console.log('数据库连接失败');
        }
        console.log('数据库连接成功');
    })
    
    //定义数据表集合结构
    var userSchema = mongoose.Schema({
        username:{
            type:String,
            required:true,
           	validate:function(params){
                return sn.length >= 10;
            } //通过返回值true与false进行判断,true通过,false不通过
        },
        password:{
            type:String,
            requried:true
        }
        .....
    })
    
增、删、改、查
增加
//User为根据userSchema发布的模板
var admin = new User({
	username:'admin',
	password:'123456',
	email:'qq21323@qq.com'
})

//把数据库进行持久化(存入数据库)
admin.save(function(err,ret){
	if(err){
		console.log('保持失败')}else{
		console.log('保持成功')//ret为存储成功返回的对象
	}
})

删除
//User为根据userSchema发布的模板
/*
	User.remove({查询字符:条件},function(err,ret){}) err 为查询失败是返回的信息,ret为查询结果集(数组)
*/
User.remove({username:'张三'},function(err,ret){
    if(err){
        console.log('查询失败')}else{
        console.log(ret);
    }
})


修改

根据id修改

//引入数据库
var mongoose = require('mongoose');

//建立连接
mongoose.connect('mongodb://127.0.0.1:27017/users');

//定义一个Schema
var Schema = mongoose.Schema;
var userSchema = new Schema({
    username:{
        type:String,
        required:true
    },
    password:{
        type:String,
        required:true
    }
});

//发布为模板
var User = mongoose.model("User",userSchema);

//User为根据userSchema发布的模板
/*
	User.updateByIdAndUpdate(ID,{键:值},function(err,ret){}) err 为查询失败是返回的信息,ret为查询结果集(数组)
*/
User.updateByIdAndUpdate('5a001b223d23930330',{password:'122'},function(err,ret){
    if(err){
        console.log('更新失败')}else{
        console.log('更新成功');
    }
})

根据条件修改

//User为根据userSchema发布的模板
/*
	User.updateByIdAndUpdate(ID,{键:值},function(err,ret){}) err 为查询失败是返回的信息,ret为查询结果集(数组)
*/
User.updateOne({'_id':'5a001b223d23930330'},{password:'122'},function(err,ret){
    if(err){
        console.log('更新失败')}else{
        console.log('更新成功');
    }
})

查询

查询全部

//User为根据userSchema发布的模板
/*
	User.find(function(err,ret){}) err 为查询失败是返回的信息,ret为查询结果集(数组)
*/
User.find(function(err,ret){
    if(err){
        console.log('查询失败')}else{
        console.log(ret);
    }
})

查询单个

User.findOne(function(err,ret){
    if(err){
        console.log('查询失败')}else{
        console.log(ret);
    }
})

根据条件查询

//User为根据userSchema发布的模板
/*
	User.find({查询字符:条件},function(err,ret){}) err 为查询失败是返回的信息,ret为查询结果集(数组)
*/

User.find({
    name:'张三',
    password:'12112'
},function(err,ret){
    if(err){
        console.log('查询失败')}else{
        console.log(ret);
    }
})

聚合查询

执行代码示例

//引入相关依赖库
var mongoose = require('mongoose');

//连接数据库
mongoose.connect('mongodb://127.0.0.1:27017:',{useNewUrlParser:true,useUnifiedTopology:true},function(err){
    if(err){
        return console.log('数据库连接失败');
    }
})

//订单数据表结构
var orderSchema = mongoose.Schema({
    order_id:String,
    uid:Number,
    trade_no:String,
    all_price:Number,
    all_num:Number
});

//把数据库表结构发布为模板
var orderModel = mongoose.model('Order',orderSchema,'order');


//查询如下
orderModel.aggregate([
    {
        $lookup:{
            from:"order_item",
            localField:"order_id",
            foreignField:"order_id",
            as:"items"
        }
    }
],function(err,ret){
   if(err){
       return console.log(err);
   }

   console.log(ret);
})

对应订单列表

//订单表结构
var orderItemSchema = mongoose.Schema({
    order_id:String,
    title:String,
    price:Number,
    num:Number
}) ;
 
var OrderItem = mongoose.model('OrderItem',orderItemSchema,'order_item');

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值