前端加分福音--node基础

博客 动态
0 292
优雅殿下
优雅殿下 2022-01-25 17:54:32
悬赏:0 积分 收藏

前端加分福音--node基础

一、Node(后端语言)介绍

1)Node介绍

1.Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。
2.简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。底层架构是:javascript. 文件后缀:.js
3.Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

2)Node的作用和应用

  1. 脱离浏览器运行JS
  2. 后台API(接口)编写
  3. Webpack、Gulp、Npm等等依赖Node
  4. 中间层:服务器中负责IO读写的中间层服务器

3)Node的优势

  1. 便于前端开发入门
  2. 性能高(异步IO)
  3. 利于前端代码整合
  4. 处理数据
  5. 有利于安全性

4)Node环境搭建

官网下载node-v-xx.msi,一路下一步,就ok;检测是否安装成功:node -v;运行程序:node xxx.js
注:帮助文档:https://nodejs.org/zh-cn/docs

二、Node的模块

1)全局模块(对象)

定义:何时何地都能访问,不需要引用
包括:process(process.env环境变量;process.argv);等等
例:

console.log(process.argv);let num1 = parseInt(process.argv[2]);let num2 = parseInt(process.argv[3]);let num3 = num1 + num2;console.log("结果是:"+ num3);

2)系统模块(重点)

定义:需要require()引入,但不需要单独下载
包括:http;path;fs等等
例1:path用于处理文件路径和目录路径的实用工具

// 导入模块是require 就类似于import java.iolet path = require('path')console.log(path.dirname('/a/c/1.jpg')) //结果:/a/cconsole.log(path.basename('/a/c/1.jpg')) //结果:1.jpgconsole.log(path.extname('/a/c/1.jpg')) //结果:.jpgconsole.log(path.resolve('/a/b/c','../../','d')) //结果:D:\a\dconsole.log(__dirname) //结果:D:\nodeconsole.log(path.resolve(__dirname,'a.js')) //结果:D:\node\a.js


例2:fs用于文件读写操作

let fs = require('fs')// 异步操作readFilefs.readFile('./a.txt',(err,data)=>{    if(err){        console.log(err)    }else{        console.log(data.toString())    }})// 异步操作writeFile// flag:"a"表示追加(append)fs.writeFile('b.txt','月薪1元',{flag:"a"},(err)=>{    if(err){        throw err    }})// 同步let data = fs.readFileSync('./a.txt')console.log(data.toString())let data1 = fs.writeFileSync('b.txt','月薪2元')console.log(data1.toString())

3)自定义模块

定义:require自己封装的模块
使用module、exports、require进行自定义模块
require引入说明:

  1. 如果有路径,就去路径里面找
  2. 没有的话就去node_modules里面找
  3. 前面都没有再去node的安装目录里面找
    例1:
// mod.js// exports.a=1;// exports.b=2;module.exports={    a:1,b:2}// index.jsconst mod = require('./mod')console.log(mod.a)console.log(mod.b)console.log(mod.c)

例2:

// mod.jsmodule.exports=function(){    console.log(123)}// index.jsconst mod = require('./mod')mod()

例3:

// mod.jsmodule.exports=class{    constructor(name){        this.name = name;    }    show(){        console.log(this.name)    }}// index.jsconst mod = require('./mod')let p = new mod('yu')p.show()

4)核心:http模块

let http = require('http')let fs = require('fs')// 创建一个httpserver服务http.createServer((request,response)=>{    // console.log('我来了')    console.log(request.url)    fs.readFile(`./${request.url}`,(err,data)=>{        if(err){            response.writeHead(404)            response.end('404')        }else{            response.end(data)        }    })    /*response.writeHead(200,{'Content-type':'text/plain'})    response.write('首页')    response.end()    response.end('首页1')*/}).listen(8888)

三、Node中的数据交互

1)GET请求

let http = require('http')let url = require('url')http.createServer((request,response)=>{    /* 1)url.parse(request.url,true)结果有很多 2)true:对拿到的url进行切割*/    let {pathname,query} = url.parse(request.url,true)    console.log(pathname,query)}).listen(8888)

1)POST请求

let http = require('http')let querystring = require('querystring')http.createServer((request,response)=>{    let result = []    request.on('data',buffer=>{        result.push(buffer)    })    request.on('end',()=>{        // console.log(result)        let data = Buffer.concat(result).toString()        console.log(querystring.parse(data))    })}).listen(8888)

四、案例1

html代码:

用户名:<input type="text" name="username" id="username"><br>密码:<input type="password" name="password" id="password"><br><button id="login">登录</button><br><button id="reg">注册</button>

js代码:

$('#login').click(function(){    $.ajax({        url:"/login",        data:{            username:$("#username").val(),            password:$("#password").val()        },        dataType:"json",        success(res){            if(res.err){                alert(res.msg)            }else{                alert("登录成功")                // location.href="admin.html"            }        }    })})$('#reg').click(function(){    $.ajax({        url:"/reg",        method:"post",        data:{            username:$("#username").val(),            password:$("#password").val()        },        dataType:"json",        success(res){            if(res.err){                alert(res.msg)            }else{                alert("注册成功")            }        }    })})

node代码:

const http = require('http')const url = require('url')const querystring = require('querystring')const fs = require('fs')let user = {    admin:123456}http.createServer((req,resp)=>{    let path,get,post    if(req.method == 'GET'){        let {pathname, query} = url.parse(req.url,true)        path = pathname        get = query        complete()    }else if(req.method == 'POST'){        let arr = []        path=req.url        req.on('data',buffer=>{            arr.push(buffer)        })        req.on('end',()=>{            post = querystring.parse(Buffer.concat(arr).toString())            complete()        })    }    function complete(){        if(path == '/login'){            resp.writeHead(200,{                "Content-Type":"text/plain;charset=utf-8"            })            let {username,password} = get            if(!user[username]){                // end中只能放字符串和buffer                resp.end(JSON.stringify({                    err:1,                    msg:'用户名不存在',                }))            }else if(user[username] != password){                resp.end(JSON.stringify({                    err:1,                    msg:'密码错误',                }))            }else{                resp.end(JSON.stringify({                    err:0,                    msg:'登录成功',                }))            }        }else if(path == '/reg'){            resp.writeHead(200,{                "Content-Type":"text/plain;charset=utf-8"            })            let {username,password} = post            if(user[username]){                resp.end(JSON.stringify({                    err:1,                    msg:'账号已存在',                }))            }else{                user[username] = password                resp.end(JSON.stringify({                    err:0,                    msg:'注册成功',                }))            }        }else{            fs.readFile(`./${path}`,(err,data)=>{                if(err){                    resp.end('404')                }else{                    resp.end(data)                }            })        }    }}).listen(8080)

五、案例2:操作MYSQL数据库

参考:https://www.npmjs.com/package/mysql
1:安装mysql依赖
npm install mysql
2:定义db.js进行操作

// 导入mysql依赖包,  mysql属于第三方的模块就类似于 java.sql一样的道理var mysql = require("mysql");// 1: 创建一个mysql的Connection对象,配置数据连接的信息 var connection =mysql.createConnection({    host:"127.0.0.1",    port:3306,    user:"root",    password:"xiao",    database:"testdb"});// 2:开辟连接connection.connect();// 3: 执行curdconnection.query("select * from kss_user",function(error,results,fields){    // 如果查询出错,直接抛出    if(error)throw error;    // 查询成功    console.log("results = ",results);});// 4: 关闭连接connection.end();

如果想开发更复杂的基于Node.js的应用程序后台,需要进一步学习Node.js的Web开发相关框架 express,art-template、koa等

作者:御灵之灵
转载请注明原文链接:https://www.cnblogs.com/yulingzhiling/p/15843563.html
若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
posted @ 2022-01-25 16:38 御灵之灵 阅读(2) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员