使用Node.js构建一个网络服务器-麻将大
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
默认情况下将接受80端口的连接,但可以按照下面的方式指定端口。
const config = {
http: {
port: 8000
}
};
const server = new majidai(config);
-
- 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