原生Node.js

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)
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容