1:Require 、Module
// a.js
/** module $ Require */
let buffer = require('./buffer');
console.log(buffer.counter(["a", "b", "c"]));
console.log(buffer.add(5, buffer.pi));
// b.js
let counter = function (arr) {
return "咱们班一共有" + arr.length + "位同学!";
}
function add(a, b) {
return `两个数的和为:${a + b}`;
}
let pi = 3.1415926;
module.exports = {
counter,
add,
pi
}
2:文件系统、事件驱动
/** 事件驱动 */
// 1.引入事件模块
let events = require('events');
// 2.创建EventEmitter对象
let myEmitter = new events.EventEmitter();
// 3.注册事件
myEmitter.on('someEvent', function (msg) {
console.log("同步执行:", msg); // 同步执行
setImmediate(() => {
console.log("异步执行:" + msg);
})
});
// 4.出发事件
myEmitter.emit('someEvent', '实现事件并传递参数到注册事件的回调函数中去');
console.log("11111");
/** 文件系统 */
// 1. 引入模块
let fs = require('fs');
// 2. 同步读取文件、写入文件
let data = fs.readFileSync('./txt/readMe.txt', 'utf8');
console.log(data);
fs.writeFileSync('./txt/writeMe.txt', data);
console.log("111");
// 3. 异步读取文件、写入文件
fs.readFile('./txt/readMe.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
})
fs.readFile('./txt/readMe.txt', 'utf8', (err, data) => {
if (err) throw err;
fs.writeFile('./txt/writeMe1.txt', data, function () {
console.log(222333)
});
})
console.log("22222");
3:创建文件,删除文件及文件夹
/** 创建文件夹、删除文件及文件夹 */
// 1. 引入文件系统模块
let fs = require('fs');
// 2. 使用模块对象调用方法 删除文件
fs.unlink('./txt/writeMe1.txt', (err) => {
if (err) throw err;
console.log("文件删除成功!")
});
// 3. 同步创建、删除文件夹
fs.mkdirSync('stuff');
fs.rmdirSync('stuff');
// 4. 异步创建和删除文件夹
fs.mkdir('./stuff', (err) => {
if (err) throw err;
fs.readFile('./txt/readMe.txt', 'utf8', (err, data) => {
if (err) throw err;
fs.writeFile('./stuff/WriteMe.txt', data, (err) => {
if (err) throw err;
console.log("文件夹创建成功,文件写入成功!");
})
})
})
fs.unlink('./stuff/WriteMe.txt', (err) => {
if (err) throw err;
fs.rmdir('./stuff', (err) => {
if (err) throw err;
console.log("文件夹及文件夹中的文件删除成功!");
})
})
4:创建本地服务器
/** 创建本地服务器 */
// 1. 通过http模块,创建本地服务器
let http = require('http');
// 2. 创建服务器方法
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
// 3. 服务对象监听服务器地址及端口号
const hostname = '127.0.0.1';
const port = 3000;
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
const http = require('http');
const fs = require('fs');
const serve = http.createServer((req, res) => {
const { url, method } = req;
if (url === '/' && method === 'GET') {
fs.readFile('./html/index.html', (err, data) => {
if (err) {
// 异常 500 body 中文信息
res.writeHead(500, {
'Content-Type': 'text/plain;charset=utf-8'
});
res.end('500 服务器错误');
return;
}
res.statusCode = 200;
res.setHeader('Content-Type', 'text/html')
res.end(data);
})
} else {
res.statusCode = 404;
res.setHeader('Content-Type', 'text/plain;charset=utf-8');
res.end('404 页面不存在')
}
});
serve.listen(3333, () => {
console.log('端口运行!')
});
5:文件流写入、读取
/** 文件流 */
let http = require('http');
let fs = require('fs');
// 读取文件流
let myReadStream = fs.createReadStream(__dirname + '/txt/readMe.txt');
// 写入文件流
let myWriteStream = fs.createWriteStream(__dirname + '/txt/writeMe.txt');
// 将读取的文件流写入到写入文件流
myReadStream.pipe(myWriteStream);
let server = new http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
// 将读取的文件流做为返回结构展示到页面
myReadStream.pipe(res);
})
const hostname = '127.0.0.1';
const port = 3000;
server.listen(port, hostname);
6:Html、Json文件读取
let http = require('http');
let fs = require('fs');
let server = new http.createServer((req,res) => {
console.log('客户端向服务端发送请求:' + req.url);
if(req.url !== "/favicon.icon"){
res.statusCode = 200;
// res.setHeader('Content-Type','text/html'); // html文件表头设置
res.setHeader('Content-Type','application/json'); // json文件表头设置
// 读取文件流
// let myReadStream = fs.createReadStream(__dirname + '/index.html','utf8'); // node读取html文件
let myReadStream = fs.createReadStream(__dirname + '/person.json','utf8'); // node读取json文件
myReadStream.pipe(res);
}
});
server.listen(8888,'127.0.0.1');
7:路由 Router
let http = require('http');
let fs = require('fs');
let server = new http.createServer((req,res) => {
if(req.url !== "/favicon.icon"){
res.statusCode = 200;
res.setHeader('Content-Type','text/html'); // html文件表头设置
// 判断用户访问的页面地址
if(req.url === '/home' || req.url === '/'){
fs.createReadStream(__dirname + '/index.html','utf8').pipe(res);
}else if(req.url === '/about'){
fs.createReadStream(__dirname + '/about.html','utf8').pipe(res);
}else if(req.url === '/api/docs'){
// fs.createReadStream(__dirname + '/api/docs.html','utf8').pipe(res);
let datas = [{name:"Kebi",age:34,job:"NBA"}];
res.setHeader('Content-Type','application/json');
res.end(JSON.stringify(datas));
}
}
});
server.listen(8888,'127.0.0.1');
8:express框架及路由参数
/* express框架 */
/*
* 1:已经封装好服务器
* 2:已经封装好路由
* 3:已经封装中间件
* 4:已经封装好网络请求
*/
// 引入express模块
const express = require('express');
// 实例化app对象
let app = express();
// 根据用户请求的地址,返回对应的数据信息
app.get("/",function(req,res){
console.log(req.url); // 打印当前请求地址
res.send("This is home page!");
});
app.get("/contact",function(req,res){
console.log(req.url);
res.send("This is contact page!");
});
// 路由参数 用途:根据路由参数展示不同的页面信息
app.get("/profile/:id",function(req,res){
res.send("您所访问的路径参数为:" + req.params.id);
});
app.listen("8888");
9:ejs 模板引擎、公共js及css文件提取及调用
<!-- app.js -->
/*
* EJS模板引擎特点
* 1:快速编译和渲染
* 2:简单的模板标签
* 3:支持浏览器端和服务器端
* 4:支持express视图系统
*/
// 引入express模块
const express = require('express');
// 实例化app对象
let app = express();
// 配置视图引擎
app.set("view engine","ejs");
// 让服务器识别外部样式表
app.use('/assets',express.static('assets'));
// 根据用户请求的地址,返回对应的数据信息 res.send() 返回文本信息 res.sendFile() 返回html页面 res.render() 返回配置的ejs文件
app.get("/",function(req,res){
res.render("index.ejs");
});
app.get("/contact",function(req,res){
res.render("contact.ejs");
});
app.listen("8888");
<!-- index.ejs -->
<!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>首页</title>
<link rel="stylesheet" href="../assets/style.css">
</head>
<body>
<% include ../public/nav.ejs %>
<h1>这里是Home页面!</h1>
<p>Welcome to the best website!</p>
</body>
</html>
<!-- contact.ejs -->
<!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>联系我们</title>
<link rel="stylesheet" href="../assets/style.css">
</head>
<body>
<% include ../public/nav.ejs %>
<h1>这里是Contact页面!</h1>
<p>tel: 88888888888</p>
</body>
</html>
10:静态文件设置、访问路径重定向
const path = require('path');
const express = require('express');
const port = 5001;
const app = express();
const subPaths = ['support/api/dev/js/summary', 'support/product', 'support/api', 'support/tool', 'support/ask'];
subPaths.forEach(item => {
console.log(item);
app.get("/" + item + '*', (req, res) => {
console.log(path.resolve(__dirname,'support/app', 'html/index.html'))
res.sendFile(path.resolve(__dirname,'support/app', 'html/index.html'));
});
});
// 静态文件设置
app.use('/support', express.static('support'));
// app.use('/demo', express.static(paths.demoPath));
// app.use('/dist', express.static(paths.distPath));
// app.get("/support", (req, res) => {
// res.redirect('/support/api/dev/js/summary');
// });
// 访问路径重定向设置
app.get("/", (req, res) => {
res.redirect('/support/api/dev/js/summary');
});
const server = app.listen(port, () => {
const host = '127.0.0.1'
const port = server.address().port
console.log("访问地址为 http://%s:%s/", host, port);
});