<node.js>搭建简易服务器

// 1.引入模块
const http = require("http");
const fs = require("fs");
const qs = require("querystring");
const url = require("url");

// 2.创建服务器
const serverObj = http.createServer((req, res) => {
    const urlObj = url.parse(req.url);
    // 路由判断 pathname是否包含api? 是数据响应 否静态响应
    if (urlObj.pathname.includes("/api")) {
        dataHandle(req, res);
    } else {
        staticHandle(req, res);
    }
})    //可以不用const serverObj,在此处直接.listen

// 挂载到指定端口
serverObj.listen(3000, () => {
    console.log("服务器开启成功: http://localhost:3000");
})

// 3.数据请求
function dataHandle(req, res) {
    // 判断请求方法(req.method解析请求方式 get post...)
    if (req.method === "GET") {
        // 解析get数据 得到query部分 xx=xx url.parse得到对象
        const obj = url.parse(req.url, true).query;
        fn(req, res, obj);
    } else if (req.method === "POST") {
        // 解析post数据 通过data事件配合end事件获取post携带的数据,qs.parse得到对象
        let str = "";
        req.on("data", (d) => {
            str += d; //把数据拼接
        })
        req.on("end", () => {
            const obj = qs.parse(str); //解析成对象
            fn(req, res, obj);
        })
    }
}

// 4.获取到的数据reqData
function fn(req, res, reqData) {
    // 根据信息执行功能
    // 打印到后端测试是否拿到 (测试)
    console.log(reqData);
    // 定义对象放数据 转json发给前端(测试)
    const obj = {
        title: "这是后端接收到的数据,又还给前端了",
        data: reqData //对象
    }
    res.write(JSON.stringify(obj)); //转json发给前端
    res.end();
}

// 5.静态资源请求
function staticHandle(req, res) {
    // 解析req.url,找到pathname部分,地址带别的东西也能找到  
    const urlObj = url.parse(req.url);
    // 主动读取文件
    fs.readFile("./www" + urlObj.pathname, (err, data) => {
        if (err) {
            res.write("notFound");
        } else {
            res.write(data);
        }
        res.end(); //放到回调函数内,保证write在end之前
    })
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值