美文网首页
12、nodejs(国庆+中秋)(01-06)

12、nodejs(国庆+中秋)(01-06)

作者: 夜幕小草 | 来源:发表于2017-10-03 02:50 被阅读10次

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)
image.png image.png

使用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);
            }
        }
    };
}

相关文章

网友评论

      本文标题:12、nodejs(国庆+中秋)(01-06)

      本文链接:https://www.haomeiwen.com/subject/toytyxtx.html