01、读取文件
读取文件内容readFile(文件名,回调(err, data) => {})
例子:
const fs = require('fs')
// 读取文件内容 readFile(文件名,回调(err, data) => {})
fs.readFile('yemuxiaocao.txt', (err, data) => {
if(err) {
console.log(`errR--:${err}`)
} else {
console.log('dataR:' + data)
}
})
02、写入文件内容, writeFile(文件名,要写入的内容,(err) => {})
const fs = require('fs')
// 写入文件内容, writeFile(文件名,要写入的内容,(err) => {})
fs.writeFile('yemuxiaocao.txt', 'guoqing', (err) => {
console.log(`errW--:${err}`)
})
03、模块
http
fs
数据请求——
前台->form、ajax、jsonp
后台->一样
前台 <-> 后台
http
请求方式:
1.GET 数据在url中
2.POST 数据不在url中
req.url=>"/aaa?user=blue&pass=123456"
/aaa
user=blue&pass=123456
GET数据解析
1.自己切
2.querystring xxx=xx&xxx=xxx
3.urlLib aaa?xxx=xx&xx=12
urlLib.parse(url, true); pathname
query
const http = require('http')
http.createServer((req, res) => {
let json = {}
if(req.url.indexOf('?') != -1){
var arr = req.url.split('?')
var url = arr[0]
// name=大树 age=18
var arr2 = arr[1].split('&')
for(let item of arr2) {
var arr3 = item.split('=')
json[arr3[0]] = arr3[1]
}
}else{
var url=req.url;
}
console.log(url)
console.log(json)
//req获取前台请求数据
res.write('aaa');
res.end();
}).listen(8082)


使用querystring
const http = require('http')
const querystring = require('querystring')
http.createServer((req, res) => {
let json = {}
if(req.url.indexOf('?') != -1){
var arr = req.url.split('?')
var url = arr[0]
// name=大树 age=18
json = querystring.parse(arr[1])
}else{
var url=req.url;
}
console.log(url)
console.log(json)
//req获取前台请求数据
res.write('aaa');
res.end();
}).listen(8082)
结果一样
使用url
const http = require('http')
const urlLib=require('url');
http.createServer((req, res) => {
let json = urlLib.parse(req.url, true)
let url = json.pathname
let query = json.query
console.log(url)
console.log(query)
//req获取前台请求数据
res.write('aaa');
res.end();
}).listen(8082)
结果跟以上的一样的
04、querystring使用
const querystring=require('querystring')
//仅支持带&符号的,如果还有其他符号的,得split()
var json=querystring.parse("user=blue&pass=123456&age=18");
console.log(typeof json) ------> object
console.log(json) ------>{ user: 'blue', pass: '123456', age: '18' }
05、url的解析
const http=require('http');
const urlLib=require('url');
http.createServer(function (req, res){
// 如果把true改变false 那就是没有对query解析 那就是一个字符串 'a=12&b=55',
// 如果把true改变true 那就是没有对query解析 那就是一个object对象 { a: '12', b: '55' }
var obj=urlLib.parse(req.url, true);
var url=obj.pathname;
var GET=obj.query;
console.log(url, GET);
//req获取前台请求数据
res.write('aaa');
res.end();
}).listen(8081);
06、post
const http=require('http');
const querystring=require('querystring');
http.createServer((req, res) => {
var str = ''
//data——有一段数据到达(很多次)
var i = 0
req.on('data', (data) => {
console.log(`第${i++}次收到数据`);
str += data
})
//end——数据全部到达(一次)
req.on('end', (data) => {
console.log(str)
// user=aaa&pass=999
var POST=querystring.parse(str);
console.log(POST);
console.log('数据全部接收完毕')
})
}).listen(8081)
07、http/fs/get/post
用户注册、登录
接口:
/user?act=reg&user=aaa&pass=123456
{"ok": false, "msg": "原因"}
/user?act=login&user=aaa&pass=123456
{"ok": true, "msg": "原因"}
对文件访问:
http://localhost:8080/1.html
http://localhost:8080/ajax.js
http://localhost:8080/1.jpg
对接口访问:
http://localhost:8080/user?act=xx...
http://localhost:8080/news?act=xxx...
08、注册、登录
const http=require('http');
const fs=require('fs');
const querystring=require('querystring');
const urlLib=require('url');
var users={}; //{"blue": "123456", "zhangsan": "123456", "lisi": "321321"}
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);
ajax请求 ajax.js
function json2url(json){
var arr=[];
for(var name in json){
arr.push(name+'='+json[name]);
}
return arr.join('&');
}
function ajax(json){
json=json || {};
if(!json.url)return;
json.data=json.data || {};
json.type=json.type || 'get';
var timer=null;
if(window.XMLHttpRequest){
var oAjax=new XMLHttpRequest();
}else{
var oAjax=new ActiveXObject('Microsoft.XMLHTTP');
}
switch(json.type){
case 'get':
oAjax.open('GET',json.url+'?'+json2url(json.data),true);
oAjax.send();
break;
case 'post':
oAjax.open('POST',json.url,true);
oAjax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
oAjax.send(json2url(json.data));
break;
}
oAjax.onreadystatechange=function(){
if(oAjax.readyState==4){
clearTimeout(timer);
if(oAjax.status>=200 && oAjax.status<300 || oAjax.status==304){
json.success && json.success(oAjax.responseText);
}else{
json.error && json.error(oAjax.status);
}
}
};
}
网友评论