Node.js+mongoDB

90 阅读5分钟

1、每个模块都有一个操作,可以公开/暴露自己的成员:

(1)、exports.属性名=值
(2)、module.exports={
				....
			      }
			

2、每个模块都有一个操作,可用于引入其他模块:

var xxx=require("./文件名"); - ./在引入时是不可以省略的,但是文件后缀可以省略

官方模块

1.Globals

1.__dirname - 当前文件夹的绝对路径。
2.__filename - 当前文件的完整的绝对路径
3.exports - 一个空{},公开和暴露自己的成员	
4.module - 指代当前模块本身,包含了其他4个变量
5.require()  - 一个函数,引入其他模块的	               
	               

2.Querystring模块:查询字符串

需要引入:let qs = require('querystring');
提供了解析url的查询字符串部分的功能
var  obj=qs.parse("查询字符串部分");
想要获取前端传来的某一个部分:obj.键名;
垃圾:只能解析查询字符串部分,如果前端传来的是一个完整的url网址,那他就解析不了

3.Url模块,网址模块

  需要引入:let url = require('url');
提供了一些实用函数,用于 完整的URL 解析
var objUrl=url.parse("完整的url网址",true);//此方法会将url网址的各个部分全部解析出来,支持传入第二个参数,是一个布尔值,如果传入的是一个true,自动调用querystring的parse方法,顺便也解析了查询字符串(请求消息:前端->后端的东西)部分
		
1、查询字符串:objUrl.query.键名 - 拿到前端传到后端的东西
2、路由:objUrl.pathname; - 判断路由的不同 


fs模块:FileSystem - 文件系统

需要引入:let fs = require('fs');
提供了可以操作文件的API
异步读取文件:
fs.readFile("绝对路径|文件路径",(err,buf)=>{
	拿到buf要干嘛?就需要写在这里
			})

异步写入文件:- 将原来的东西,替换掉
fs.writeFile("绝对路径|文件路径","写入的新内容",()=>{
console.log("写入完毕了,以后要做什么")
			})

异步追加文件:- 保留原来的东西
fs.appendFile("绝对路径|文件路径","写入的新内容",()=>{
console.log("写入完毕了,以后要做什么")
			})
                            

6.http模块

    引入:var http=require("http");
          var url=require("url");
          var fs=require("fs");
          var app=http.createSever();
          app.lister(80);
      app.on("request",(req,res)=>{
             var objUrl=url.parse(req.url,true);
             var router=objUrl.pathname;
         if(router=="/"&&首页){
         fs.raedFile("路径"),(err,buf)=>{
             res.end(buf);
         }
         }
         else if(router.match(/css|js|jpg|png|gif|woff/)!=null){
	fs.readFile("./public"+router,(err,buf)=>{
		res.end(buf);
	})
             
      
      })
      

npm:node package manager:node的模块/包管理器:专门管理第三方模块的,作用:下载安装、删除、更新、维护包的依赖关系...

    如何使用第三方模块:
	1、打开网站:npm官网
	2、搜索你需要用到的模块,尽量用带有完全符合标志的那个包
	3、打开cmd:检查一下npm下载工具是否安装成功:npm -v
	4、下载:npm i 包名
	5、删除:npm un 包名 - win7系统,删除时只需删除当前包,不会删除依赖关系
	6、更新:npm up 包名 - 有可能此项目n年后要维护,有可能包就过期了,需要更新
	下周:使用mongoDB 

MongoDB

 1.启动和配置
 2.语法
         1、数据库操作:
		1、查询数据库:show dbs
		2、创建/切换数据库:use 数据库名称; - 如果是一个空的数据库,show dbs是查看不到的,至少要创建一个表才能看到
		3、查看当前选中的数据库:db
		4、创建数据表:db.createCollection("表名");
		5、删除数据库:db.dropDatabase() - 能忘了就忘了,会坐牢

	2、数据表操作:
		1、创建数据表:db.createCollection("表名",{size:5242880,capped:true,max:5000}); - 第二个参数限制操作,最大存储空间为5M,最多为5000条数据 - 个人不推荐做限制
		2、查看目前所有的数据表:db.getCollectionNames();
		3、删除数据表:db.表名.drop();
        3、数据操作:
		1、增:db.表名.save({属性名:属性值,....}) - 一次只能插入一条数据			-		注册
		     举例:db.users.save({name:"hjf",age:18,pwd:"123123",email:"hjf@qq.com",vip:"0"})
		             db.表名.save([{},{},{},...]) - 一次只能插入一条数据
		     个人建议:键名要统一

		2、删:db.表名.remove({键值对})					-  注销账号
		     举例:	db.表名.remove({username:"lr"})

		3、改:db.表名.update({条件},{要改的新内容})				-  修改密码
		     举例:db.表名.update({name:"paoge",pwd:"666666"},{age:17}) - 这句话会把名字为paoge和密码为666666的替换为只剩age为17
			db.表名.update({name:"paoge",pwd:"666666"},{$set:{age:17}}) - 仅仅只修改了age

		     最难的:
		4、查:db.表名.find({}) - 所有的
		             db.表名.find({age:18}) - 找到所有年龄为18的数据
		             db.表名.find({age:{$gte:18}}) - 找到所有年龄大于等于18的数据
		             db.表名.find({name:/正则/}) - 甚至可以写入正则来进行模糊查询
		             db.表名.find({},{name:1,age:1}) - 只需要name和age,其他的不要,10相当于是开关 - 我们登陆时只需要判断用户名和密码是否正确
		             db.表名.find().sort({age:1}) - 按照age升序排列,降序的话换为-1
		             db.表名.find().skip(0).limit(2) - 跳过前0条,再拿2条,可以理解为前两条;
		             db.表名.find().count() - 获取此表有多少条数据

node.js和mongoDB关联起来

1.引入mongoose
        const mongoose=require("mongoose")
2.连接数据库
        mongoose.connect("mongodb://127.0.0.1/数据库名称")
 3.设置数据类型,防止用户乱输
     var userSchema=monggoose.Schema({
             name:String,
             age:Number
             ........
             })
          var 模型名 =monggoose.model("users",userSchema,"users")
                                     模型名首字母大写      模具表名
  4.公开模型
      module.exports={模型名}
      

sql语句上场了:

增:
    var user=new 模型名({
        name:objurl.query.name,
        name:objurl.query.age
        .................
        })
     user.save((err)=>{
         console.log(err);//错误提示对象,null说明没有错误
	//插入完毕后要干什么在这里写代码
     })
 删
     uers.deleteOne/many({条件//name:name},(err)=>{
         //删除完毕后要干什么在这里写代码
     
     }
     )
     
 改:
模型名.updateOne/updateMany({条件},{新内容},(err)=>{
		//修改完毕后要干什么在这里写代码
				})
查:
模型名.find({条件},(err,result)=>{
	result;//查询到数据库中的东西
			}) 
                            

ajax asynchronous JavaScript and XML; 直译

  var xhr=new XMLHttprequest();
  xhr.open("GET",""路由?key=value&key=value");
  xhr.send(null);
  xhr.onreadystatechange=()=>{
        if(xhr.readyState==4&&xhr.status==200){
                var date=xhr.responseText
                }
  }