nodejs
- 基于Chrome V8引擎的Javascript运行环境
- 使用了一个事件驱动、非阻塞式I/O模型,轻量又高效
- 包管理器npm
文件路径
- __dirname//不包含文件名的路径
- __filename//包含文件名的路径
global
- nodeJs的全局对象
modul和requi
module.exports=要模块的函数或者对象
require(‘文件路径’)//引入模块
事件模块
let events=require('events'); //引入事件模块
let myEmitter=new events.EventEmitter(); //创建EventEmitter对象
myEmitter.on('someEvent',function (msg) {console.log(msg)}); //注册事件
myEmitter.emit('someEvent','实现事件并传递参数到注册时间的回调函数中');//第一个参数是事件,第二个参数是事件参数
setImmediate(异步事件)// setImmediate()方法可以使事件异步发生
文件系统
- let fs=require(‘fs’); //引入文件系统模块
- let readMe=fs.readFileSync(‘readMe.txt’,’utf8′) //同步读取文件
- fs.writeFileSync(‘writeMe.txt’,readMe);//同步写入文件
- fs.readFile(‘readMe.txt’,’utf8′,function (err,data) {if (err) throw err;console.log(data);})//异步读取文件
- fs.writeFile(‘writeMe2.txt’,data) //异步写入文件
- fs.unlink(‘writeMe3.txt’,function(err){if (err) throw err;console.log(1);})//删除文件
- fs.mkdirSync(‘stuff’)//同步创建文件夹
- fs.rmdirSync(‘stuff’) //同步删除文件
- fs.mkdir(‘文件名’,回调函数) //异步创建文件夹
- fs.rmdir(‘文件名’,回调函数) //异步删除文件夹
- fs.createReadStream(__dirname + ‘/readMe.txt’, ‘utf8’); //读取数据流
创建服务器
//通过HTTP模块,创建本地服务器
let http=require('http');
//创建本地服务器方法
let server=http.createServer(function (req,res) {
console.log('客户端向服务器端发送请求'+req.url);
res.writeHead(200,{"Content-type":"text/plain"});
res.end("Server is working!");
});
//服务对象监听服务器地址以及端口号
server.listen(3002,"127.0.0.1");
console.log("server is running....");
读取HTML数据
let http=require('http')
let fs = require('fs');
//搭建服务器
let server = http.createServer(function (req, res) {
res.writeHead(200, {"Content-type": "text/html"});
//读取数据流
let myReadStream = fs.createReadStream(__dirname + '/index.html', 'utf8');
myReadStream.pipe(res);
})
server.listen(3000,'127.0.0.1');
console.log('server is running....')
读取json数据
let http=require('http')
let fs = require('fs');
//搭建服务器
let server = http.createServer(function (req, res) {
res.writeHead(200, {"Content-type": "application/json"});
//读取数据流
let myReadStream = fs.createReadStream(__dirname + '/person.json', 'utf8');
myReadStream.pipe(res);
})
server.listen(3000,'127.0.0.1');
console.log('server is running....')
路由
let http=require('http')
let fs = require('fs');
//搭建服务器
let server = http.createServer(function (req, res) {
if (req.url==='/home' || req.url==='/'){
res.writeHead(200, {"Content-type": "text/html"});
fs.createReadStream(__dirname + '/index.html').pipe(res);
}else if (req.url==='/contact'){
res.writeHead(200, {"Content-type": "text/html"});
fs.createReadStream(__dirname + '/content.html').pipe(res);
}else if(req.url==='/api/about'){
let data=[{name:"ChangJun",age:'30'},{name:"Bucky",age:'28'}]
res.writeHead(200, {"Content-type": "application/json"});
res.end(JSON.stringify(data))
}
})
server.listen(3000,'127.0.0.1');
console.log('server is running....')
express框架
- 已经封装好服务器
- 已经封装好路由
- 已经封装好中间件儿
- 已经封装好网络请求…
express使用
- npm install express –save-dev
//引入express模块
let express=require('express');
//实例化expres对象
let app=express();
//通过对象调用对应的方法
//根据用户请求的地址,返回对应的数据信息
app.get('/',function (req,res) {
res.send('This is home page');
});
app.get('/contact',function (req,res) {
res.send('this is contace')
});
//路由参数
app.get('/profie/:id',function (req,res) {
res.send('您所访问的路径参数为'+req.params.id);
});
//监听服务器的端口号
app.listen(8888);
EJS模版引擎
- npm install ejs –save-dev
app.js
//引入express模块
let express=require('express');
//实例化expres对象
let app=express();
//配置视图引擎
app.set('view engine','ejs');
//让服务器识别外部样式表
app.use('/assets',express.static('assets'));
//通过对象调用对应的方法
//根据用户请求的地址,返回对应的数据信息
app.get('/',function (req,res) {
res.sendFile(__dirname+'/index.html');
});
app.get('/contact',function (req,res) {
res.sendFile(__dirname+'/content.html')
});
//路由参数
app.get('/profie/:id',function (req,res) {
let data=[{age:21,name:['ChangJun','WuXiaoHong']},{age:21,name:['ChangJun2','NiXiaoLei',]}];
res.render('profile',{websiteName:req.params.id,data:data});
});
//监听服务器的端口号
app.listen(8888);
profile.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>homepage</title>
<style>
body {
background: skyblue;
color: white;
padding: 30px;
}
h1 {
font-size: 48px;
letter-spacing: 2px;
text-align: center;
}
h2 {
font-size: 48px;
letter-spacing: 2px;
text-align: center;
}
p {
font-size: 16px;
text-align: center;
}
ul {
text-align: center;
list-style: none;
}
</style>
</head>
<body>
<h1>Hello ChangJun!<%= websiteName %></h1>
<h2>个人介绍</h2>
<ul>
<% data.forEach(function (item) { %>
<li>年龄:<%= item.age %></li>
<% item.name.forEach(function (item) { %>
<li>
<%=item %>
</li>
<% }) %>
<% }) %>
</ul>
</body>
</html>