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>