Node自带模块
-
http创建http服务 -
url解析url信息 -
path处理文件路径 -
fs文件管理,其内置函数第一个参数是文件路径,最后一个参数是callback
fs.stat回调得到的参数信息执行.isDirectory()检测是文件还是目录
fs.mkdir创建目录
fs.writeFile创建写入文件
fs.appendFile追加文件
fs.readFile读取文件
fs.readdir读取目录
fs.rename重命名
fs.rmdir删除目录
fs.unlink删除文件
开始
创建server.js ,引入模块
//server.js
const http = require('http')
const url = require('url')
const path = require('path')
调用http中的createServer创建服务器
//server.js
/*
req => request 请求信息
res => response 响应信息
*/
http.createServer((req,res)=>{
url.parse(req.url) //使用url.parse(url,true)解析请求的url地址 后面参数传true解析成对象
path.extname() //获取后缀
res.writeHead(200,{"Content-Type":"text/html;charset=utf8"}) //设置状态码、响应头
res.write('你好,世界!') //响应内容
res.end('hello,world!') //响应内容并结束,必须
}).listen(8080) //监听的端口
使用node命令执行server.js
node server.js
自启动工具
安装 supervisor
npm install -g supervisor
使用supervisor代替node命令
supervisor server.js
封装类似Express框架

18N)E_Y7}8EVO2H7I_AO396.png
//my-express.js
const _http = require('http')
const _fs = require('fs');
const _url = require('url');
const _path = require('path');
const _querystring = require('querystring');
const _mimetype = require('../json/MIME.json');
let myExpress = function(){
let stack = {
get:{},
post:{}
};
let staticPath = null;
let staticSourceExist = null;
app = async function(req,res){
let {url,method} = req;
//获取访问的url
let {pathname,query} = _url.parse(url,true);
method = method.toLowerCase();
//将 get 数据绑定在 req.query 上
req.query = query;
//将 post 数据绑定在 req.body 上
let postData = '';
await new Promise((resolve) => {
req.on('data',(chunk) => {
postData += chunk;
})
req.on('end',() => {
req.body = _querystring.parse(postData);
postData = null;
resolve();
})
})
url = pathname;
//获取访问的扩展名
let extname = _path.extname(url);
let mimetype = _mimetype[extname] || 'text/html';
//封装res.send()
res.send = function (content) {
content = Object.prototype.toString.call(content) === '[object Object]' ? JSON.stringify(content) : content;
var status = staticSourceExist || stack.get[url] || stack.post[url] ? 200 : 404;
res.writeHead(status,{'Content-type':`${mimetype};charset=utf8`});
res.end(content)
}
//设置路由 暴露静态资源
switch(method){
case 'get':
staticSourceExist = false;
if(staticPath && extname){
let filePath = _path.resolve(__dirname,`../${staticPath}/${url}`);
await new Promise((resolve,reject) => {
_fs.readFile(filePath,(err,data) => {
if(!err){
staticSourceExist = true;
res.send(data)
}
resolve();
});
})
}
if(stack.get[url]){
stack.get[url](req,res)
}else{
res.send('页面不存在')
}
break;
case 'post':
if(stack.post[url]){
stack.post[url](req,res)
}else{
res.send('页面不存在')
}
break;
default:
res.send('不合法的请求')
}
}
let server = _http.createServer(app)
server.static = function(path){
staticPath = path;
}
server.get = function(route,fn){
stack.get[route] = fn
}
server.post = function(route,fn){
stack.post[route] = fn
}
return server;
}
module.exports = myExpress;
简单使用
//server.js
const myExpress = require('./module/my-express');
let app = myExpress();
let port = 8088;
app.listen(port,(err) => {
if(!err){
console.log(`Server listen in ${port}...`)
}
});
app.static('public');
app.get('/',(req,res)=>{
html = '<form action="/post" method="post">name:<input type="text" name="name"><br>age:<input type="text" name="age"><br><input type="submit"></form>'
res.send(html)
})
app.get('/login',(req,res)=>{
res.send('这是登录页面')
})
app.post('/post',(req,res) => {
res.send(req.body)
})