使用Node.js构建一个网络服务器-麻将大

GitHub license

majidai是什么意思?

majidai 是一个适用于 Node.js 的 Web 框架。
由于不使用第三方库,所以非常轻量。
数据量小于50KB。

在下列情况下,我们开发了“majidai”。

    • 勝手にインストールされるライブラリを避けたかった

 

    • GET、POST(application/json, form-data,…)など方法が違っても同じやり方でデータへアクセスしたかった

 

    • 設定ファイルによってサーバー機能を制限したかった(DEVモードやPRODモード)

 

    • 簡単に静的ファイルを配信したかった

 

    レスポンスをシンプルにしたかった

安装

本文不包括Node.js的安装。

1. 项目的初始化

从终端切换到工作目录并初始化项目。

npm init -y
2. 麦迪安装

使用以下命令安装”majidai”。

npm install majidai
3. 服务器代码

首先,创建一个名为”server.js”的文件,并粘贴以下代码。

// majidaiの読み込み
const majidai = require("majidai");

// インスタンス化
const server = new majidai();

// 受付開始
server.start();
服务器的启动

使用以下命令启动Web服务器。

node server.js
undefined

默认情况下将接受80端口的连接,但可以按照下面的方式指定端口。

const config = {
    http: {
        port: 8000
    }
};
const server = new majidai(config);
undefined
    • stdout – クライアント情報(JSONオブジェクト)

 

    stderr – エラー内容

应用编程

写作方式

以下是如何书写”majidai”的方法。

server.METHOD(PATH, CALLBACK)
方法是什么

以下有三种选项:
– get:仅接受HTTP GET请求。
– post:仅接受HTTP POST请求。
– listen:可以在一个路径上接受多个HTTP方法。
※更多详细信息请点击这里。

PATH 是一个环境变量,用于存储操作系统在执行命令时查找可执行文件的路径。

“/”、”/top”、”/user/dakc”等。这是关于在哪里接收请求的问题。

回呼是什么?

這是一個回調函數。當接收到指定的PATH請求時,這個函數將被執行。該函數有以下兩個參數:
– request:
– response:
majidai將在兩個對象中添加「mj」對象。

请 MJ 示意。

请求添加的mj对象具有以下两个函数(方法),用于操作来自客户端的数据。

    • getParams : GETで送られて来た情報をJSONオブジェクトとして返します。キーを引数として指定することで特定のキーに対する値のみを取得する事が可能です。

 

    postParams: POSTで送られて来た情報をJSONオブジェクトとして返します。キーを引数として指定することで特定のキーに対する値のみを取得する事が可能です。※x-www-form-urlencoded, application/json, form-dataどれでデータが送られて来てもJSONオブジェクトとして返します。
回应。

为了向客户端返回响应,具有以下方法。

    • text : plain/textとしてレスポンス

 

    • json : application/jsonとしてレスポンス

 

    • static : 静的コンテンツのレスポンス

 

    • redirect : 別のURLへリダイレクト

 

    error : HTTPエラーとしてレスポンス

有关更详细信息,请点击此处。

样本

让我们通过查看示例来尝试一些可以做的事情吧!也请阅读代码中的注释。

1. 取票处
const server = new majidai();

server.get("/home", (request,response) => {
    // リクエストがhttp://〇〇/home?price=230)
    var price = request.mj.getParams("price");
    console.log(price);
    // 230

    // OR
    // 全データをJsonオブジェクトとして取得
    var getData = request.mj.getParams();
    console.log(getData);
    // { price: '230' }

    // 「price」の値を取得
    var price_ = getData.price;
    console.log(price);
    // 230


    return "ここで返すものがクライアントへのレスポンスになります";
});

server.start();
2. 邮寄接待
const server = new majidai();

server.post("/login", (request,response) => {
    // リクエストがhttp://〇〇/login
    // <form action="/login" method="POST">
    //   <input name="id" type="text" value="abc">
    //   <input name="pass" type="password" value="p@ss">
    // </form>

    // 「id」の値を取得
    var id= request.mj.postParams("id");
    console.log(id);
    // abc

    // OR
    // 全データをJsonオブジェクトとして取得
    var postData = request.mj.postParams();
    console.log(postData);
    // { id: 'abc', pass: 'p@ass' }

    // 「id」の値を取得
    var id_ = postData.id;
    console.log(id_);
    // abc


    return "ここで返すものがクライアントへのレスポンスになります";
});

server.start();
3. 支持多种HTTP方法
const server = new majidai();

server.listen({ method: ["GET", "POST"], path: "/profile" }, (request, response) => {
    // GETでもPOSTでもこのの処理を実行されます。
    // DO SOMETHING

    return "something";
});

server.start();

参数化的URL

由于不清楚哪种表达方式更易懂,所以选择了上述的写法。如果您有任何意见或发现,请务必在评论中留言。

这是我非常想实现的功能。
因为我更喜欢”http://〇〇/user/abdf/edit”,而不是”http://〇〇/user?id=abdf&command=edit”。

// {}の中のものがその名前のキーでデータを取得する事ができます。
server.get("/books/{year}/{price}", function (req, res) {
    // リクエストがhttp://〇〇/books/2020/5000

    // {}の中のものがその名前のキーでデータを取得する事ができます。
    // 「year」の値を取得
    var year = req.mj.getParams("year");
    console.log(year );
    // 2020

    // 「price」の値を取得
    var price= req.mj.getParams("price");
    console.log(price);
    // 5000

    // GETと受けたものをレスポンスとして返す
    return req.mj.getParams();
});

即使在“post”和“listen”的情况下,也可以使用ParameterizedURL功能。

靜態內容傳遞

默认情况下,禁用了静态内容的分发,但是通过指定 “Document Root” 可以使指定文件夹可以分发以下内容。

const config = {
    http: {
        documentRoot: './public'
    }
};
const server = new majidai(config);

Docker – 稳定多样的容器化平台。

通过执行以下一行命令,您可以在浏览器上确认majidai的操作。

docker run -it --rm -p 80:80 dakc/majidai npx /data/server.js

最后

由于需要一个只使用Node.js标准功能的轻量级框架,我们开发了majidai。我们以MIT许可证发布,您可以随意使用。

文档 – https://dakc.github.io/majidai.html

广告
将在 10 秒后关闭
bannerAds