注释版:
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();
}