作为一个刚接触node js的新手,我在学习的时候将笔记整理在博客上, 一些重要的部分也配有详细的代码,也可能会有不对的地方,(不对的地方大家告诉我,我也会及时更改的)嘻嘻!
node优点:
- 性能高
- 跟前台js配合方便
- js 能用的Node-js也能用
运行 Win+R
命令行中Ctrl+C 终止命令行
- e:进入E盘 切换盘符
- cd 改变当前目录
- node xxx.js 执行程序
tab 快捷补全文件缩略名 (eg:node 1+tab 直接显示 node 1.js)
node JS 服务器
http 协议
request 请求 输入-请求的信息
response 响应 输出-给浏览器的东西(帮助返回东西)
const http=require('http'); //引入http文件 (require 引进nodejs中的http模块)
var server=http.createServer(function(req,res){ //createServer 创建一个服务器
switch(req.url){
case '/1.html':res.write("11111");break; //请求localhost:8080/1.html 显示 11111
case '/2.html':res.write("22222");break;
default:res.write("404");break;
}
//里面有一个回调函数 function
res.write('abc'); //向前台写东西
res.end(); //结束
});
//监听--等着
//服务器通过端口来区分 (端口 就是一个数字)
server.listen(8088); //端口号 localhost:8080
//服务器需要一个listen 监听 监听某一个端口(通过8080端口保证可以被别人访问到)
- createServer 创建一个服务器
- createServer 里面有一个回调函数 function
- function 有两个对象 request response
- 服务器需要一个listen 监听 监听某一个端口
网站小图标 (favicon.ico)
如何来进行文件操作:fs(读取文件,返回文件)
const fs=require('fs');
//readFile(文件名,回调函数)读文件
fs.readFile('aaa.txt',function(err,data){ //错误信息,数据(读到的信息)
if(err){
console.log("0");
}
else{
console.log("1");
}
});
//writeFile(文件名,内容,回调函数)写文件
fs.writeFile('aaa.txt','haha',function(err){
console.log(err);
});
readFile(文件名,function(err,date){})
writeFile(文件名,内容,function(err){})
选择路径打开对应的文件路径
const http=require('http');
const fs=require('fs');
var server=http.createServer(function(req,res){
//req.url=>'index.html'
//读取=>'./www/index.html'
//'./www'+req.url
var filename='./www'+req.url;
fs.readFile(filename,function(err,data){
if (err) {
res.write('404');
}else {
res.write(data);
}
res.end(); //异步 要实现什么时候读取完文件什么时候走 所以end放在里面
});
});
server.listen(8080);
在这里说明一下路径的问题:
(如图:www文件夹内部有1.html页面)
- 如图所示 我们创建的服务器,在server.js中创建的服务器 ( 哇,你可别装傻你不知道服务器在哪创建的~)
- 在当前路径下进入www文件 (
.
在当前文件夹内的操作..
返回上一文件/
进入到同一路径下文件夹的内部) - 所以要通过服务器访问www文件夹下面的1.html (licalhost:端口号./www/1.html)
异步/同步:
异步—— 多个操作可以同进行 ,前一次的操作没完事,后一次也可以开始
同步—— 一次一个
如何接受前台数据请求
数据请求——
前台->form,ajax,jsonp
后台->一样
前台<->后台
http协议联系起来
请求方式:
1.GET 数据在url中(数据在url地址中出现)
2.POST 数据不在url中
GET 数据解析
- 自己切
- querystring (只能解析这种情况:
字符串为:xxx=xx&xxx=xx
)
//主要解析post数据
querystring.parse(str); //截切的结果为 eg:{user:'blue',pass:'123456'}
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; //有可能没有数据eg:favicon.ico{}
}
console.log(url,GET);
}).listen(8080);
//结果形式 eg:/aaa { user: '小明', pass: '123456' }
- urlLib (
字符串为:aaa?xxx=xx&xxx=xx
)
//主要解析get数据
urlLib.parse(url,true); //用parse的时候给个ture自动解析
pathname 网址部分:’/aaa‘
query 数据部分:{xxx:xx,xxx:xx}
//例子
const http=require('http');
const url1=require('url');
http.createServer(function(req,res){
var obj=url1.parse(req.url,true);
var url=obj.pathname;
var GET=obj.query;
console.log(url,GET);
}).listen(8080);
POST数据解析
POST 很大——分段发送(若把get比作人的头 post就是人的身体)
分段原因:避免内容过大传输的堵塞,又可能出错减少最大的损失
var http=require('http');
//var querystring=require('querystring');
http.createServer(function(req,res){
var str=''; //此处用字符串 接受所有的数据
req.on('data',function(data){ //每次都回传回一个数据data
str+=data;
}); //每当date发生时 说明有一段数据到达了
req.on('end',function(){
console.log(str);
//var post=querystring.parse(str);
//console.log(post);
}); //end只发生一次,全部数据到达
}).listen(8082);//eg:post得到数据的结果 user=123456&pass=123456
(9.25~9.30)