node.js服务器搭建

注释版:

const http = require("http");
const fs = require("fs");
const url = require("url");     // 解析url地址的每一部分
const qs = require("querystring");

http.createServer((req,res)=>{
    if(req.url !== "/favicon.ico"){

        // 搭建服务器时,假设某种特定的路由
        // 当url中存在api时,必然采取某种路由处理方式
        // "/api?type=login"
        // "/api"

        // 页面地址:"http://localhost:3000/index.html"
        // 数据请求地址:"http://localhost:3000/api?type=login"

        let urlObj = url.parse(req.url, true);
        // console.log(urlObj.pathname);

        if(urlObj.pathname === "/api"){
            // ajax处理
            ajaxHandle(req, res);
        }else{
            // 文件处理
            fileHandle(req, res);
        }
    }
}).listen("3000")

function ajaxHandle(req, res){
    // 解析url
    let urlObj = url.parse(req.url, true);

    // 获取get方式发送过来的数据
    // console.log(urlObj.query);

    // 获取post方式发送的数据
    // req身上的data事件,会在post发送数据时被多次触发,每次触发时会拿到一个数据碎片,每次拿到一个数据碎片都需要手动拼接起来
    // let str = "";
    // req.on("data",(res)=>{
    //     // console.log(res);
    //     str += res;
    // })
    // req身上的end事件,会在post数据发送结束后被触发,此时查看拼接之后的数据碎片,就是完整的post数据了
    // req.on("end",()=>{
    //     let o = qs.parse(str);
    //     console.log(o);
    // })

    // 既能获取post,又能获取get
    let str = "";
    req.on("data",(res)=>{
        // console.log(res);
        str += res;
    })
    req.on("end",()=>{
        let resObj = null;
        // 判断是否有post数据
        if(str === ""){
            // 没有post,只有get
            resObj = urlObj.query;
        }else{
            // 没有get,只有post
            resObj = qs.parse(str);
        }

        // 在后端就可以开始数据的处理了
        consol.log(resObj);

    })
}


function fileHandle(req, res){
    fs.readFile("./www"+req.url, (err, data)=>{
        if(err){
            res.write("404");
        }else{
            res.write(data);
        }
        res.end();
    })
}

纯代码版

const http = require("http");
const fs = require("fs");
const url = require("url")
const qs = require("querystring");
const serverObj = http.createServer((req, res) =>{
    if (req.url != "/favicon.ico") {
        let urlObj = url.parse(req.url, true);
        if (urlObj.pathname == "/api"){
            ajaxHandle(req,res);
        }else{
            fileHandle(req, res)
        }
    }
}).listen("3000");
function fileHandle(req, res) {
    fs.readFile("./www" + req.url, (err, data) => {
        if (!err) {
            res.write(data)
        } else {
            res.write("404")
        }
        res.end();
    })
}
function ajaxHandle(req,res) {
    let urlObj = url.parse(req.url, true); 
    let str="";
    req.on("data",(res)=>{
        str+=res;
    }) 
    req.on("end",()=>{
        let result=null;
    })
    if(str==""){
        result=urlObj.query
    }else{
        result=qs.parse(str)
    } 
    console.log(result);
    res.end();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值