week5

82 阅读5分钟
Nodejs:不是js,但是语法和Javascript非常相似
目的:使用代码搭建一个服务器&文件系统
如何运行:
    打开cmd输入:node回车,就可以开始敲“js”代码了
    脚本/文件模式:
        先创建xx.js里面书写自己的代码
        打开cmd输入:node文件的绝对路径
    安装插件,前提:至少前两个方法能成功,才能安装插件
        vacode-插件:code runner,对着代码处右键,第一个选项就是 coderunner,或者右上角有一个开始按钮可以点击
js和node的区别
    相同点:都可以使用一切的ECMAScript的东西,包括一切API都可以使用,在服务器端不存在任何浏览器,所以不必担心ES5/ES6的兼容性问题。
    不同点:
        JavaSrciptES+BOM+DOM
        node:一切的BOM+DOM都没有
模块(module):每个xx.js都可以称之为是一个模块
    模块开发:
        分工合作:每个模块交给对应的人完成,最后再由【主模块】进行引入
        每个模块都有一个操作,可用于公开/暴露自己的成员:
            Node.js自带一个预定义变量:exports可以直接使用,是一个对象,放在此函数里面的路径就是允许引入的模块文件
            语法:
                var X=require("./路径");// ./千万不能省略
模块的分类:
    官方模块
    第三方模块
    自定义模块
        官方模块:不需要下载,在安装Node.js环境的时候,就已经带上了但是某的模块需要引入,某的模块不需要引入
            Global模块:不需要引入的,可以直接使用的
                提供了:
                    五个预定义变量。可以直接使用
                        __filename -- 获取当前文件的完整的绝对路径
                        __dirname -- 获取当前文件的完整的绝对路径,不包含文件的名字
                        exports --空对象,可以公开暴露自己的成员
                        require -- 函数,可以导入其他模块
                        module -- 指代当前模块本身,包含以上几个操作
            querystring模块:解析查询字符串,使其变成一个对象,可以获取到前端传到后端的消息(请求消息)
                需要引入:var qs=require("querystring")
            url模块:
                需要引入:url=require("url")
            buffer模块:缓冲区,可以将数据变成一个16进制的数字,可以理解为是Node.js中的一种一新的数据类型,不手动使用看不懂
            fs模块:
                需要引入:var fs=require("fs")
            http模块:搭建服务器&文件系统,需要引入的
                var http=require("http")
                var url=require("url")
                var fs=require("fs")
                var app=http.createServer()
                app.listen(80)
                app.on("request",(req,res)=>{
                    var objUrl=url.parse(req.url,true)
                    var router=objUrl.pathname
                    if(router=="/"){
                             fs.readFile("/public/html/index.html",(err,buf)=>{
                                 res.end(buf)
                        })
                    }
                })
            ip查询:打开cmd 输入ipconfig回车,IPV4地址(局域网址)
            强调:一切的src和herf和action都是一个请求都是一个路由,这个请求就需要后端来解析,根据不同的请求响应不同的内容
            如何下载第三方模块:
                npm工具
                在项目中打开cmd
                    下载:npm i 包名
                    更新:npm up 包名
                    删除:npm un 包名

mongo:

是基于JSON的数据库:json就是javascriot object notation-js的一部分所以用法和js相似
    bin文件夹有mongo.exe(客户端)+mongond.exe(服务器端)
    如何启动:
        在bin文件打开cmd,输入:.\mongod.exe --dbpath=你想要保存的绝对文件路径
        千万不要关闭mongod服务器端的cmd
        再打开一个cmd输入:.\mongo.exe -- 再在上一个cmd可以查看是否连接成功
        
    mongo语法:
        数据库的操作:
            查询所有的数据库:show dbs
            创建/切换数据库,没有就是创建,有了就是切换:use
            查看当前选中的数据库:db
            创建数据表:db.createCollection("表名")
            删除数据库:db.dropDatabase()
        数据表的操作:
            查看目前所有的数据表:db.getCollection Names()
            删除数据表:db.表名.drop()
        数据的操作:
            增:db.表名.save([{键值对,....},{键值对,....}]) 不加[]只能加一个条件
            删:db.表名.remove({条件}) 不加条件删除所有
            改:db.表名.update({条件},{$set:{新内容}})
            查:db.表名.find({})

Node.js操作数据库

下载安装第三方模块:mongoose
使用步骤:
    引入:var mongoose=require("mongoose")
    连接数据库:mongoose.connect("mongodb://127.0.0.1/数据库名称")
    防止用户乱输入:
        var UserSchema=mongoose.Schema({
            name:string
            pwd:string
            ega:number
            email:string
            vip:string
        })
    var User=mongoose.model("User",UserSchema,"数据表名")
    增:
        var x=new User({
            name:
            pwd:
            age:
            email:
            vip:
        })
        储存到数据库之中:
            X.save.then(()=>{
                //新增完毕后要干什么必须放在这个函数里面因为它是异步操作
            })
    删:
        User.deleteOne/deleteMany({条件}).then(()=>{
                //新增完毕后要干什么必须放在这个函数里面因为它是异步操作
        })
    改:
        User.updateOne/updateMany({条件},{新内容}).then(()=>{
                //新增完毕后要干什么必须放在这个函数里面因为它是异步操作
        })
    查:
        User.find({条件}).then((rs)=>{
            rs->查询到的JSON数据
        })

同步和异步的概念:

同步交互:用户向服务器端发起请求,直到服务器端进行响应的全过程,用户是不可以做其他事情的(等)
异步交互:用户向服务器端发起请求,知道服务器端进行响应的全过程,用户是可以做其他事情的(不等)

AJAX:Asynchronous JavaScript And XML -- 异步的js和xml

如何使用:固定步骤4步
    创建ajax核心对象
        var xhr=new XMLHttpRequest()
    前端建立和服务器端的连接
        xhr.open("GET/POST","/路由")
    向服务器端发送请求消息
        xhr.send("key=value&...&...")
        特殊:
            GET:send方法失效,但是还不能省略,必须写为null
                xhr.open("GET","/路由?key=value&...")
                xhr.send(null)
            POST:send方法可用
                xhr.open("POST","/路由")
    绑定状态监听事件
        xhr.onreadystatechange=()=>{
            if(xhr.readyState==4&&xhr.status==200){
                xhr.responseText;
            }
        }