一、Node.Js介绍
-
作用:做后台
-
优势:性能:高(是php的86倍)
方便:门槛低(JS语法),大公司在用 -
缺点:兼容平台少
学习资源少,要求高 -
要求(环境配置):
安装Nodejs
官网:nodejs.org -
版本介绍:
LTS 推荐版
V7.6.x 稳定版
V7.7.x 非稳定版
CURRENT 最新版 -
编写:任何编辑器,js文件内编写
-
运行:
DOS命令行(小黑框)
MAC终端
git
在当前文件夹打开命令行工具,使用< node 文件名 >启动node中BOM、DOM不能使用,ECMAScript可以使用
node主要用来操作文件的读写,数据库的请求,处理前端ajax请求。
注意:因为node完美支持ES6,所以在node环境中可以使用ES6的所有语法
二、开启服务
在node中,所有功能都被封装成模块,默认使用模块化开发
开启服务需要用到的模块:
http模块:用来开启服务
fs模块:用来操作模块
url模块:用来解析url
querystring模块:用来解析url携带的数据
http模块:
//1.引入模块
const http = require("http”);
//2.开启一个http服务,接收的回调函数中,有两个返回值,req表示请求(客户端到服务端),res表示响应(服务端到客户端)
const httpObj = http.createServer((req,res)=>{…})
//创建服务成功后,每次请求都会触发createServer的回调函数
const httpObj = http.createServer((req,res)=>{
//http请求默认情况下,会多请求一次favicon.ico图标文件,如不需要可以过滤
if(req.url != "/favicon.ico"){
//可以在服务端打印信息,只要被访问就会触发
console.log("有人访问了");
//参数req有属性为url,表示当前服务被哪个url访问,打印访问服务的url
console.log("访问的地址是:" + req.url);
//如果需要向前端返回数据,而且数据需要以html的形式被解析,有两种方式:
// 1.通过head和meta标签设置字符编码
//res.write("<head><meta charset='utf-8'></head>");
// 2.通过设置请求头,设置字符编码(推荐)
res.writeHead(200,{"content-type":"text/html;charset=utf-8"})
//通过参数res的write方法,向前端返回数据,此处打印标签进行测试
res.write("<mark>晚上吃什么</mark>")
//完成此次请求的响应之后,要结束本次响应,否则前端会一直处在请求状态
res.end()
}
})
//3.监听端口地址,成功开启服务,执行回调函数...
httpObj.listen("8001","127.0.0.1",()=>{
console.log("server runing...");
});
fs模块:
//引入fs(文件系统)模块
const fs = require('fs’);
//调用fs模块的读取文件方法,接收三个参数:
//参数1:指定读取文件名为请求的文件名
//参数2:指定解析文件内容的编码格式,可省略
//参数3:回调函数,读取文件后执行,接收两个参数
//参数1:错误日志,或,null
//参数2:文件内容
fs.readFile("./www/index.html","utf-8",(err,fsCont)=>{
if(err){
//如果不为null,表示有错误内容,响应404
res.write("404")
}else{
//如果为null,表示找到文件,将文件作为数据响应
res.write(fsCont)
}
res.end(); //结束本次请求
})
url模块:
//引入url模块
const urlModel = require("url")
//模拟一个url
var url = "http://www.baidu.com/data/hahaha/?a=1&b=2#01";
console.log(typeof url);
console.log(url);
//将url解析成对象
var obj = urlModel.parse(url);
var obj = urlModel.parse(url,true); //将url中的query属性解析成对象
console.log(typeof obj);
console.log(obj);
//将对象解析成url
var str = urlModel.format(obj)
console.log(typeof str);
console.log(str);
querystring模块:
//将查询字符与对象互相转换的模块
const querystring = require(“querystring”);
//模拟类似于get方式发送的信息
var str = 'name=admin%padd=123';
//根据%号,分割字符为对象
var obj = querystring.parse(str,"%");
console.log(typeof obj);
console.log(obj);
//模拟对象
var obj2 = {a:1,b:2}
console.log(obj2)
//将对象转换成类似于get方式发送的信息,用%号隔开
var str2 = querystring.stringify(obj2,"%");
console.log(typeof str2)
console.log(str2)
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html;charset=utf-8'
});
res.write('hello 1902'); r
es.write('<h1>hello node</h1>');
res.end();
})
url模块结合nodejs服务器
const http = require('http');
const url = require('url');
const server = http.createServer((req, res) => {
// req.url为地址栏的地址
console.log(req.url)
res.writeHead(200, {
'Content-type': 'text/html;charset=utf-8'
});
res.write('<h1>hello 1902</h1>');
res.write('<h1>hello node</h1>');
res.end();
});
server.listen(3000);
console.log('your server is running at http://localhost:3000')
如果想要获取到参数
if (req.url !== ‘/favicon.ico’) {
console.log(req.url);
console.log(url.parse(req.url, true)); // url.parse(str, true)
}
url.parse(req.url, true).query获取到参数信息
url.parse(req.url, true).pathname获取到路由信息
url.parse(req.url, true).port获取到端口号
url.parse(req.url, true).protocol获取到协议信息
url.parse(req.url, true).hostname获取到域名信息
控制台学习querystring控制台输入node指令
* querystring.parse(str)
将字符串形式的参数解析成为一个对象
querystring.parse(‘course=node&class=1902’)
输出结果为
{ course: ‘node’, class: ‘1902’ }
3.2 node服务器结合querystringconst http = require(‘http’);
const url = require(‘url’);
const querystring = require(‘querystring’);
const server = http.createServer((req, res) => {
if (req.url !== ‘/favicon.ico’) {
console.log(req.url)
console.log(url.parse(req.url).query)
console.log(querystring.parse(url.parse(req.url).query)) //**********************
}
res.writeHead(200, {
‘Content-type’: ‘text/html;charset=utf-8’
});
res.write(‘
hello 1902
’);res.write(‘
hello node
’);res.end();
});
server.listen(3000);
console.log(‘your server is running at http://localhost:3000’)
在真实项目中其实一般不需要使用querystring,会使用url.parse(str, url)代替