node.js 18講代碼筆記

node.js

模塊引用

//app.js

var stuff =  require('./count')

console.log(stuff.counter(['aa','nodejs','react']));
console.log(stuff.add(7,8));

//count.js
var counter = function(arr){
    return "there are " +arr.length + " elements in the array";
}

var add  = function(a,b){
    return `the sum of the 2 number is ${a+b} `;

}

var pi = 7;
// module.exports.counter = counter;
// module.exports.add = add;
// module.exports.pi = pi;

module.exports = {
    counter : counter,
    add: add,
    pi:pi
}

這裏是app.js 引用count.js事件

//app.js
var events =  require('events');//事件的一個庫

//新增事件
var myEmitter = new events.EventEmitter();

//給事件加綁定函數
myEmitter.on('someEvent',function(message){
    console.log(message);
})

//手動觸發事件
myEmitter.emit('someEvent','the event was emitted');

//app.js2

var events =  require('events');//事件的一個庫
var util = require('util');//工具庫

//定義一個類

var Person = function(name){
    this.name = name
}

//person 類 繼承了 events類
util.inherits(Person,events.EventEmitter);
//新建三個對象
var xiaoming = new Person('xiaoming');
var lili = new Person('lili');
var lucy = new Person('lucy');
//把對象放數組中
var person = [xiaoming, lili, lucy];

//循環數組每個對象都有綁定一個事件
person.forEach(function(person){
    person.on('speak',function(message){
        console.log(person.name + "said: " + message);
    })
});

//觸發事件
xiaoming.emit('speak','hi');
lucy.emit('speak','I want a curry');

//讀寫文件 同步 異步

//app.js
//文件系統的庫
var fs = require('fs');

//讀文件 sync 是同步的意思
var readme = fs.readFileSync('input.txt','utf8');
console.log(readme);

//寫文件
fs.writeFileSync('writeMe.txt',"hello world!");

//node 執行javascript的時候是單線程的
//去了sync就是異步了
var read = fs.readFile('writeMe.txt','utf8',function(err,data){
    console.log(data);
});

console.log('finished');


//創建和刪除目錄 app.js

//文件系統的庫
var fs = require('fs');
//unlink 刪除 加 sync 後變成同步
fs.unlink('writeMe.txt',function(){
    console.log('delete writeMe.txt file');
});
//創建目錄
fs.mkdirSync('stuff');
//刪除目錄
fs.rmdirSync('stuff');

//app.js2

//文件系統的庫
var fs = require('fs');
//創建目錄
fs.mkdir('stuff',function(){
    fs.readFile('input.txt','utf8',function(err,data){
        fs.writeFile('./stuff/writeMe.txt',data,function(){
            console.log('copy successfully');
        })
    })
});

web 服務器part1//app.js
var http = require('http');
//創建一個服務器 請求 相應
var sever =  http.createServer(function(request,response){
    console.log('Request received');
    //響應純文本類型
    response.writeHead(200, {'Content-Type':'text/plain'});
    response.write('hello come to my web!');
    response.end();
})
sever.listen(3000,'127.0.0.1');
console.log('sever started on localhost 3000')

part2 怎麼響應json給客戶端//app.js

var http = require('http');
var onRequest = function(request,response){
    console.log('Request received');
    //響應json類型
    response.writeHead(200, {'Content-Type':'applacation:json'});
    var myobj = {
        name:'app',
        job:'teacher',
        age:27
    }
    response.end(JSON.stringify(myobj));
}
//創建一個服務器 請求 相應
var sever =  http.createServer(onRequest);
sever.listen(3000,'127.0.0.1');
console.log('sever started on localhost 3000')

part3 怎麼響應html文件//app.js

var http = require('http');
var fs = require('fs');
var onRequest = function(request,response){
    console.log('Request received');
    //響應json類型
    response.writeHead(200, {'Content-Type':'text/html'});
    var myReadStream = fs.createReadStream(__dirname + '/index.html','utf8'); 
   myReadStream.pipe(response);
}
//創建一個服務器 請求 相應
var sever =  http.createServer(onRequest);
sever.listen(3000,'127.0.0.1');
console.log('sever started on localhost 3000')


part4 用模塊化思想組織//app.js 除了引用庫 其他的全寫一個函數裏,然後再其他頁面引用

var http = require('http');
var fs = require('fs');

function startServer(){
    var onRequest = function(request,response){
        console.log('Request received');
        //響應json類型
        response.writeHead(200, {'Content-Type':'text/html'});
        var myReadStream = fs.createReadStream(__dirname + '/index.html','utf8'); 
       myReadStream.pipe(response);
    }
    //創建一個服務器 請求 相應
    var sever =  http.createServer(onRequest);
    sever.listen(3000,'127.0.0.1');
    console.log('sever started on localhost 3000')
}

exports.startServer = startServer;

//count.js

var server = require('./app');
server.startServer();

part5 路由//app.js


var http = require('http');
var fs = require('fs');

function startServer(){
    var onRequest = function(request,response){
        console.log('Request received' + request.url);
      if(request.url==='/'){
        response.writeHead(200, {'Content-Type':'text/html'});
        fs.createReadStream(__dirname + '/index.html','utf8').pipe(response);
      }else if(request.url ==='/home'){
        response.writeHead(200, {'Content-Type':'text/html'});
        fs.createReadStream(__dirname + '/home.html','utf8').pipe(response);
      }else if(request.url==='/js/json'){
        response.writeHead(200, {'Content-Type':'application/json'});
        var jsonObj = {
            name:'yqcznb',
            wr:'Everything will be ok!'
        }
        response.end(JSON.stringify(jsonObj));
      }else{
          response.writeHead(200,{'Content-Type':'text/html'});
          fs.createReadStream(__dirname + '/404.html','utf8').pipe(response);
      }
        
    }
    //創建一個服務器 請求 相應
    var sever =  http.createServer(onRequest);
    sever.listen(3001,'127.0.0.1');
    console.log('sever started on localhost 3001')
}

exports.startServer = startServer;

part6 重構路由代碼//app.js

var server = require('./server');
var router = require('./router');
var handler = require('./handler');

var handle = {};
handle["/"] = handler.home;
handle["/home"] = handler.home;
handle["/review"] = handler.review;
handle["/api"] = handler.api_records;
server.startServer(router.route, handle);
//router.js

var fs = require("fs");
function route(handle, pathname, response){
    console.log('Routing a request for ' + pathname);
    if(typeof handle[pathname] === 'function'){
        handle[pathname](response);
    }else{
        response.writeHead(200, {'Content-Type':'text/html'});
        fs.createReadStream(__dirname + '/404.html','utf8').pipe(response);
    }
}

module.exports.route = route;

//handler.js
var fs = require('fs');
function home(response){
    response.writeHead(200, {'Content-Type':'text/html'});
    fs.createReadStream(__dirname + '/index.html','utf8').pipe(response);
}

function review(response){
    response.writeHead(200, {'Content-Type':'text/html'});
    fs.createReadStream(__dirname + '/home.html','utf8').pipe(response);
}

function api_records(response){
    response.writeHead(200, {'Content-Type':'application/json'});
        var jsonObj = {
            name:'yqcznb',
            wr:'Everything will be ok!'
        }
        response.end(JSON.stringify(jsonObj))
}

module.exports = {
    home:home,
    review:review,
    api_records:api_records
}

//server.js
var http = require('http');
var fs = require('fs');

function startServer(route,handle){
    var onRequest = function(request,response){
        console.log('Request received' + request.url);
        route(handle, request.url, response); 
    }
    //創建一個服務器 請求 相應
    var sever =  http.createServer(onRequest);
    sever.listen(3001,'127.0.0.1');
    console.log('sever started on localhost 3001')
}

module.exports.startServer = startServer;

part7 使用GET或POST

//app.js
var server = require('./server');
var router = require('./router');
var handler = require('./handler');

var handle = {};
handle["/"] = handler.home;
handle["/home"] = handler.home;
handle["/review"] = handler.review;
handle["/api"] = handler.api_records;
server.startServer(router.route, handle);

//router.js
var fs = require("fs");
function route(handle, pathname, response,params){
    console.log('Routing a request for ' + pathname);
    if(typeof handle[pathname] === 'function'){
        handle[pathname](response, params);
    }else{
        response.writeHead(200, {'Content-Type':'text/html'});
        fs.createReadStream(__dirname + '/404.html','utf8').pipe(response);
    }
}

module.exports.route = route;

//handler.js
var fs = require('fs');
function home(response){
    response.writeHead(200, {'Content-Type':'text/html'});
    fs.createReadStream(__dirname + '/index.html','utf8').pipe(response);
}

function review(response){
    response.writeHead(200, {'Content-Type':'text/html'});
    fs.createReadStream(__dirname + '/home.html','utf8').pipe(response);
}

function api_records(response, params){
    response.writeHead(200, {'Content-Type':'application/json'});
    response.end(JSON.stringify(params))
}

module.exports = {
    home:home,
    review:review,
    api_records:api_records
}
//index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form action="/api" method="POST">
        name: <input type="text" name="name">
        age: <input type="text" name="age">
        <input type="submit" value="Submit">
    </form>
</body>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章