NodeJS--后台
JavaScript--前台
后台:
1.PHP
2.Java
3.Python
...
优势:
1.性能
nodejs php 86
有人大致做了测试,node的性能是php的86倍
2.跟前台JS配合方便
3.NodeJS便于前端学习
一些windows小操作:
1.切换盘符 e:
2.改变目录 cd 目录名
3.执行程序 node xxx.js
nodeJS--服务器
http--协议
request 请求 输入-请求的信息
response 响应 输出-输出的东西
每个服务器可提供多种服务,可设置多个端口,以区分每个端口对应不同的服务
//引入http系统模块
const http=require('http');
//创建一个服务器,接收一个回调函数,返回一个server对象
//每当访问这个服务器的时候,这个回调函数就会执行
let server=http.createServer(function (req, res){
//console.log('有人来了');
res.write("abc");//写入
res.end();//结束
});
//监听--等着
//端口--数字
//服务器需要监听某一个端口,那么来自这个端口的请求都会被服务器接收到
server.listen(8080); 客户端--服务器--磁盘
磁盘--服务器--客户端
读取和写入都是异步操作
//fs.readFile(文件名,回调函数)
fs.readFile('111.txt',function(err,data){
if(err){
console.log('读取失败')
}else{
//data读取出来为二进制数据,只限于机器机器之间的对接
console.log(data.toString)
}
})
//fs.writeFile(文件名,内容,回调函数)
fs.writeFile('222.txt','zyh',function(err){
console.log(err)
}) <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="http://localhost:8080/aaa" method="get">
用户:<input type="text" name="user" value=""><br>
密码:<input type="password" name="pass" value=""><br>
<input type="submit" value="提交">
</form>
</body>
</html>1.纯手工切
const http=require('http');
http.createServer(function (req, res){
var GET={};
//防止favicon报错,做判断处理
if(req.url.indexOf('?')!=-1){
var arr=req.url.split('?');
var url=arr[0];
var arr2=arr[1].split('&');
for(var i=0;i<arr2.length;i++){
var arr3=arr2[i].split('=');
GET[arr3[0]]=arr3[1];
}
}else{
var url=req.url;
}
console.log(url, GET);
//req获取前台请求数据
res.write('aaa');
res.end();
}).listen(8080);2.用用querystring
const querystring=require('querystring');
var json=querystring.parse("user=zyh&pass=123456&age=18");
console.log(json); const http=require('http');
const querystring=require('querystring');
http.createServer(function (req, res){
var GET={};
if(req.url.indexOf('?')!=-1){
var arr=req.url.split('?');
var url=arr[0];
GET=querystring.parse(arr[1]);
}else{
var url=req.url;
}
console.log(url, GET);
//req获取前台请求数据
res.write('aaa');
res.end();
}).listen(8080);3.用用url
const urlData=require('url');
var obj=urlData.parse("http://www.baidu.com/index?a=12&b=5", true);
console.log(obj.pathname, obj.query); const http=require('http');
const urlData=require('url');
http.createServer(function (req, res){
//不加true时query是字符串,加了true时,query解析为json
var obj=urlData.parse(req.url, true);
var url=obj.pathname;
var GET=obj.query;
console.log(url, GET);
//req获取前台请求数据
res.write('aaa');
res.end();
}).listen(8080); get数据:
const urlData=require('url')
urlData.parse(req.url, true)
post数据接收:POST数据比GET大得多
header => 头部 => get<32k
content => 身体 => post<1G
POST很大 => 分段传输
遇到网络环境不稳定的情况,如果不是分段传输,需要重新传输
而分段传输可确保只重新传输损坏的字节
data 有一段数据到达触发一次(多次)
end 数据全部到达触发一次(一次)
const http=require('http');
const querystring=require('querystring');
http.createServer(function (req, res){
//POST——req
var str='';//接收数据
//data——有一段数据到达(很多次)
var i=0;
req.on('data', function (data){
console.log(`第${i++}次收到数据`);
str+=data;
});
//end——数据全部到达(一次)
req.on('end', function (){
var POST=querystring.parse(str);
console.log(POST);
});
}).listen(8080); <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="http://localhost:8080/aaa" method="post">
用户:<input type="text" name="user"><br>
密码:<input type="password" name="pass"><br>
<!--<textarea name="content" rows="8" cols="40"></textarea>-->
<input type="submit" value="提交">
</form>
</body>
</html> const http=require('http');
const fs=require('fs');
const urlData=require('url');//针对get
const querystring=require('querystring');//针对post
var server=http.createServer(function (req, res){
//GET
var obj=urlData.parse(req.url, true);
var url=obj.pathname;
const GET=obj.query;
//POST
var str='';
req.on('data', function (data){
str+=data;
});
req.on('end', function (){
const POST=querystring.parse(str);
//console.log(url,GET,POST)
//文件请求
var file_name='./www'+url;
fs.readFile(file_name, function (err, data){
if(err){
res.write('404');
}else{
res.write(data);
}
res.end();
});
});
});
server.listen(8080); <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="ajax.js" charset="utf-8"></script>
<script type="text/javascript">
window.onload=function (){
var oTxtUser=document.getElementById('user');
var oTxtPass=document.getElementById('pass');
var oBtnReg=document.getElementById('reg_btn');
var oBtnLogin=document.getElementById('login_btn');
oBtnLogin.onclick=function (){
ajax({
url: '/user',
data: {act: 'login', user: oTxtUser.value, pass: oTxtPass.value},
type: 'get',
success: function (str){
var json=eval('('+str+')');
if(json.ok){
alert('登录成功');
}else{
alert('登录失败:'+json.msg);
}
},
error: function (){
alert('通信错误');
}
});
};
oBtnReg.onclick=function (){
ajax({
url: '/user',
data: {act: 'reg', user: oTxtUser.value, pass: oTxtPass.value},
type: 'get',
success: function (str){
var json=eval('('+str+')');
if(json.ok){
alert('注册成功');
}else{
alert('注册失败:'+json.msg);
}
},
error: function (){
alert('通信错误');
}
});
};
};
</script>
</head>
<body>
用户:<input type="text" id="user"><br>
密码:<input type="password" id="pass"><br>
<input type="button" value="注册" id="reg_btn">
<input type="button" value="登录" id="login_btn">
</body>
</html> const http=require('http');
const fs=require('fs');
const querystring=require('querystring');
const urlLib=require('url');
var users={}; //{"zyh": "123456", "yanhui": "123456"}
var server=http.createServer(function (req, res){
//解析数据
var str='';
req.on('data', function (data){
str+=data;
});
req.on('end', function (){
var obj=urlLib.parse(req.url, true);
const url=obj.pathname;
const GET=obj.query;
const POST=querystring.parse(str);
//区分——接口、文件
if(url=='/user'){//接口
switch(GET.act){
case 'reg':
//1.检查用户名是否已经有了
if(users[GET.user]){
res.write('{"ok": false, "msg": "此用户已存在"}');
}else{
//2.插入users
users[GET.user]=GET.pass;
res.write('{"ok": true, "msg": "注册成功"}');
}
break;
case 'login':
//1.检查用户是否存在
if(users[GET.user]==null){
res.write('{"ok": false, "msg": "此用户不存在"}');
//2.检查用户密码
}else if(users[GET.user]!=GET.pass){
res.write('{"ok": false, "msg": "用户名或密码有误"}');
}else{
res.write('{"ok": true, "msg": "登录成功"}');
}
break;
default:
res.write('{"ok": false, "msg": "未知的act"}');
}
res.end();
}else{//文件
//读取文件
var file_name='./www'+url;
fs.readFile(file_name, function (err, data){
if(err){
res.write('404');
}else{
res.write(data);
}
res.end();
});
}
});
});
server.listen(8080);