依赖:ts-node-dev
node模块声明文件:@type/node
建立一个可以运行的服务器
const server = http.createServer()
server.on('request',(request:IncomingMessage,response:ServerResponse)=>{
response.serHeaders()
response.statusCode = 200
response.write(//...)
response.end()
})
server.lsiten(8888,()=>{})
获取请求体
request有一个data事件可以监听请求体,还有一个end事件,当请求上传完成时触发
const array = []
request.on('data',(chunk)=>{
array.push(chunk)
})
request.on('end',()=>{
const body = Buffer.concat(array).toString()
response.end()
//异步操作,所以需要一个end
})
服务器是如何获取路径的
- 获取当前路径 __dirname
- 拼接文件夹路径
import * as p from 'path';
const path = p.resolve(\__dirname,'public')
- 拼接文件路径
// 获取文件名
import * as url from 'url';
const object = url.parse(request.path)
const {filename,search} = object
p.resolve(path,filename)
此外,我们还可以通过
response.setHeader('Cache-Control','public,maxage = 3600 * 24 * 365')
设置缓存时间,加快服务器响应
完整代码
import * as http from 'http';
import {IncomingMessage, ServerResponse} from 'http';
import * as fs from 'fs';
import * as p from 'path';
import * as url from 'url';
// 声明请求
const server = http.createServer();
const publicDir = p.resolve(__dirname, `public`);
//监听请求
server.on('request', (request: IncomingMessage, response: ServerResponse) => {
const {url: path, method, headers} = request;
//获取查询参数
if (method !== 'GET') {
response.statusCode = 405;
response.end();
return;
}
const object = url.parse(path);
const {pathname, search} = object;
let filename = pathname.substring(1);
if (filename === '') {filename = 'index.html';}
fs.readFile(p.resolve(publicDir, filename), (error, data) => {
if (error) {
response.statusCode = 404;
response.end();
} else {
response.setHeader('Cache-control', `public,max-age=${3600 * 24 * 365}`);
response.end(data);
}
});
}
);
//监听端口
server.listen(8888, () => {
// console.log(server.address());
//目前的地址
});