1.Node核心模块 http
- 使用
node创建一个http服务器,并且可以接收到客户端发来的请求 - 获取到客户端具体的
请求数据,并根据不同的请求数据进行处理 - 将处理之后的结果,
响应回客户端,并断开本次连接
运行js文件时可以安装 nodemon 来进行实时的更改实现自动刷新
- 命令行执行
npm i -g nodemon
// 1. 导入http模块
var http = require('http');
// 2. 创建服务器
// 获取到服务器的实例对象
var server = http.createServer();
server.listen(2000, () => {
console.log('http://127.0.0.1:2000');
})
// 3. 监听客户端的事件
// req 请求信息
// res 响应的信息
server.on('request', (req, res) => {
console.log('request 接收到了');
res.write('你好')
res.end()
})
2.服务器数据响应不同类型处理
简易版
server.on('request', (req, res) => {
// console.log('request 接收到了');
// res.setHeader('Content-Type', 'application/json');
// res.setHeader('Content-Type', 'text/html; charset=utf-8'); // html
// res.setHeader('Content-Type', 'text/plain; charset=utf-8'); // 纯文本
// res.write('<h1>你好</h1>')
if (req.url == './') {
fs.readFile('./index.html', 'utf-8', (err, data) => {
res.write(data)
res.end();
})
} else {
fs.readFile('./个人项目介绍.png', (err, data) => {
res.end(data)
});
}
// res.end()
})
3.处理客户端不同的请求方法
- GET 参数处理
var http = require('http');
var fs = require('fs');
var url = require('url');
var server = http.createServer();
server.listen(2000, () => {
console.log('http://127.0.0.1:2000');
})
function log(value, string) {
console.log(value, string);
}
// http://127.0.0.1:2000/user?id=222&name=zhangsan
server.on('request', (req, res) => {
if (req.method === 'GET') {
const { id, name } = url.parse(req.url, true).query
log(id, '===id===')
log(name, '===name===')
if (req.url == './') {
fs.readFile('./index.html', 'utf-8', (err, data) => {
res.write(data)
res.end();
})
} else {
fs.readFile('./demo.png', (err, data) => {
res.end(data)
});
}
} else if (req.method === 'POST') {
}
})
- POST 参数处理
<form action="./" alt="">
<input type="text" name="name"/>
<input type="text" name="age"/>
<input type="submit" value="提交POST"/>
</form>
server.on('request', (req, res) => {
if (req.method === 'GET') {
const { id, name } = url.parse(req.url, true).query
if (req.url == './') {
fs.readFile('./index.html', 'utf-8', (err, data) => {
res.write(data)
res.end();
})
} else {
fs.readFile('./demo.png', (err, data) => {
res.end(data)
});
}
} else if (req.method === 'POST') {
var str = ''
req.on('data', (data) => {
str += data
console.log(str, '===data===');
})
req.on('end', () => {
// 通过querystring 来解析流数据信息
log(require('querystring').parse(str))
})
res.end()
}
})
4.对服务器代码进行模块化拆分
- server 服务层
var http = require('http');
var router = require('./router')
var server = http.createServer();
server.listen(2000, () => {
console.log('http://127.0.0.1:2000');
})
server.on('request', (req, res) => {
router(req, res)
})
- router 请求管理层
var fs = require('fs');
var url = require('url');
var controaller = require('./comtroller')
module.exports = (req, res) => {
if (req.method == 'GET') {
const { id, name } = url.parse(req.url, true).query
if (req.url == '/') {
controaller.index(res)
} else {
fs.readFile('./demo.png', (err, data) => {
res.end(data)
});
}
} else if (req.method == 'POST') {
var str = ''
req.on('data', (data) => {
str += data
console.log(str, '===data===');
})
req.on('end', () => {
// 通过querystring 来解析流数据信息
controaller.user(require('querystring').parse(str), res)
})
res.end()
}
}
- controller 逻辑控制层
var fs = require('fs');
module.exports = {
index(res) {
fs.readFile('./index.html', 'utf-8', (err, data) => {
res.write(data)
res.end();
})
},
user(paramsData, res) {
// 业务逻辑代码
console.log(paramsData, '===data===');
console.log(res, '==res==');
}
}