[04] 认识服务器网址和请求

这是一个小专案并没有要使用express这样的服务器框架

所以需要自己制作路由功能

首先安装 nodemon 这样每次更改後会自动刷新服务器方便开发

npm i nodemon --save-d

然後更改 package.json 的 scripts

  "scripts": {
    "start": "nodemon index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

然後启动服务器

npm start

接着修改index.js档案

var http = require("http");

var server = http.createServer(async function (req, res) {
  let url = req.url.split("?")[0];
  let paramrter = req.url.split("?")[1];
  if (paramrter) paramrter = getUrlParameter(paramrter);
  let data = null;
  let buffers = [];
  for await (const chunk of req) {
    buffers.push(chunk);
  }
  data = Buffer.concat(buffers).toString();
  data = data ? JSON.parse(data) : null;
  // 上方获取资料区

  // 这边开始实作 url
  if (url === "/") {
    res.writeHead(200, { "Content-Type": "application/json" });
    // 实作判断请求
    if (req.method === "GET") {
      if (paramrter) {
        res.write(
          JSON.stringify({
            message: "Hello GET Parameter",
            paramrter: paramrter,
          })
        );
      } else {
        res.write(JSON.stringify({ message: "Hello GET no Parameter" }));
      }
      res.end();
    } else if (req.method === "POST") {
      if (data) {
        res.write(JSON.stringify({ message: "Hello POST data", data: data }));
        console.log("post data");
      } else {
        res.write(JSON.stringify({ message: "Hello POST no data" }));
        console.log("post no data");
      }
      res.end();
    } else {
      res.write("404 page");
      res.end();
    }
  } else {
    res.write("404 page");
    res.end();
  }
});

server.listen(3000);

console.log("noder server is start");

/**
 * @description 用来确认是否有带参数
 *
 * @param {string} reqUrl url ? 後面的部分
 * @return {*}
 */
function getUrlParameter(reqUrl) {
  var url = reqUrl; //获取url中"?"符後的字串
  var theRequest = new Object();
  var strs = null;
  strs = url.split("&");
  for (var i = 0; i < strs.length; i++) {
    theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
  }
  return theRequest;
}

反覆使用 postman 确认 post 和 get 方法和结果

https://ithelp.ithome.com.tw/upload/images/20210910/20130673BDQfD0P8QN.jpg

这就是最简单的路由

day04


<<:  [Day16] Andoroid - Kotlin笔记: CustomDialog

>>:  Day 4 - 条件运算式

30天轻松学会unity自制游戏-开启死亡画面

先来制作死亡後开启死亡画面,把之前死亡画面的Active(开启)暂时先关闭,等Player死亡时候才...

(Day4) 陈述式 /表达式

前言 JavaScript 的语句分成两种 陈述式、表达式,这两种语法区分并不困难,接下来会一一介绍...

EP18 - 欢迎来到容器管理工具的 EKS

昨天我们把 Django 专案容器化, 最後推送上 AWS ECR, 部署上仍旧仰赖 Code De...

Day18-13. Roman to Integer

今日题目:13. Roman to Integer(Easy) Roman numerals are...

Day-19: 咩啊抓产生假资料,让我们来使用factory_bot

因为专案做的是电商网站, 不免俗需要一些假资料, 所以在一个月做专案的期间也学会了, 如何做假资料,...