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的速度非常快,性能非常好。
官网下载node-v-xx.msi,一路下一步,就ok;检测是否安装成功:node -v;运行程序:node xxx.js
注:帮助文档:https://nodejs.org/zh-cn/docs
定义:何时何地都能访问,不需要引用
包括: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);
定义:需要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())
定义:require自己封装的模块
使用module、exports、require进行自定义模块
require引入说明:
// 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()
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)
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)
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)
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)
参考: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等