シンプルなHTML + Node.js + MongoDBデータの相互作用

ここに画像の説明を挿入

1.フロントエンドの背景は何ですか?

ウィキペディアの要約:
  フロントエンドとバックエンドは、プロセスの開始と終了を説明する一般的な用語です。フロントエンドは入力情報を収集するように機能し、バックエンドはそれを処理します。コンピュータプログラムのインターフェーススタイルと視覚的表現はフロントエンドに属しています。

第2に、フロントエンドバックエンドとデータベースの相互作用を実現する方法は?

(1)フロントエンドの静的ページデータの送信と取得

フロントエンドデータをサーバーに送信するには、通常、2つの方法があります。1。フォーム送信; 2. AJAX

这是我的 directorys 文件夹下的 index.html 静态页面

	// 1. 下面的form表单通过POST请求,提交一个基本信息到 /insert 路由中
	<form action="/insert" method="POST">
		<input type="text" name="name"><br>
		<input type="text" name="age"><br>
		<input type="radio" name="sex" value="男"><br>
		<input type="radio" name="sex" value="女"><br>
		<input type="submit" value="POST">
	</form>
	
	// 2. 通过一个button按钮发送一个AJAX的GET请求到/find 路由中
	<button id="getdata">获取服务端数据</button>
	<script>
        let data;
		document.getElementById("getdata").onclick = function(){
			var xhr = new XMLHttpRequest();
			xhr.onreadystatechange = function(){   //监听状态的变化的事件
				if(xhr.readyState == 4 && xhr.status == 200){
					data = JSON.parse(xhr.responseText)
					console.log(data);
				}	
			}
            // xhr.open("get","/find?page=3&pageAmount=10", true);
            xhr.open("get","/find", true);
			xhr.send(null)
        }
    </script>

:背景、オープンサーバの状態/アクイジション・モード差に提出二つのデータは、ということです
  情報を受信するためのフォームを返すために、背景を形成するには、新しいページに直接(リフレッシュページ)が表示されます
  AJAXはxhr.responseTextによって返された背景情報を受信します

以下是以form表单发送一个POST请求的局部展示 (具体原理须结合后台理解)
ここに画像の説明を挿入
以下是以Btn按钮 发送AJAX请求的局部展示 (具体原理须结合后台理解)
ここに画像の説明を挿入

(2)バックグラウンドNode.js-dataの受信と返送

私のNodeサーバーの構築方法はExpressを使用するため、Node.jsのExpressモジュールについてある程度理解しておく必要があります。

这是 directorys文件夹同级目录下的 mongodb.js ,运行Node服务器即是运行该文件

	// 调用./MongoModule 模块 ,该模块为自定义模块,其中封装着与数据库的具体操作
	let db = require("./MongoModule");
	// Express
	let express = require("express");
	let app = express();
	// index.html 首页
	app.use("/", express.static("./directorys"));
	// 获取GET请求的search 
	let url = require("url");
	/* 获取POST请求的search  */
	let bobyParser = require("body-parser");
	app.use(bobyParser.urlencoded({extended: false}));
	
	/* 
	 *	以下调用insertOne、find等方法即是通过require("./MongoModule")模块封装的与数据库连接后的操作(下面会讲到)
	 *	
	 *	通过app.post("/insert", (req, res) => { ... })路由即是获取前台的form表单提交的基本信息
	 *		这里的req.body中存储的即是前台发送信息,以对象存储 
	 *		eg: { name: 'codingScript', age: '18岁', sex: '男' }
	 *	通过app.get("/find", (req, res) => { ... }路由即是获取前端的AJAX请求信息
	 *	...... 删除、修改同理
	 */
	// 1. 插入
	app.post("/insert", (req, res) => {
	    db.insertOne("home", "mine", req.body, (err, result) => res.send(result));
	});
	
	// 2. 查找 
	app.get("/find", (req, res) => {
	    let query = url.parse(req.url,true).query;
	    let pageAmount = parseInt(query.pageAmount) || 0;
	    let page = parseInt(query.pageAmount * (query.page-1)) || 0;
		db.find({
	        "dbName": "home",                       // 数据库名
	        "collectionName": "mine",               // 集合名
	        "pageAttr": {                       
	            "pageAmount":pageAmount,            // 每页数据量
	            "page":page                         // 第page页
	        },
	        "json": {},                             // 查询条件
	        "sort":{"num":1},                       // 排序     1:升序  -1:降序
	        "callback": function(err, result) {     // 查询结果
	            res.send(result);					// 查询的内容返回到前台
	        }
	    });
	});
	// 3. 删除
	app.get("/delete", (req, res) => {
	    let query = url.parse(req.url,true).query;
	    db.deleteMany("home", "mine", {"num":parseInt(query.num)}, (err, result) => res.send(result));
	});
	
	// 4. 修改
	app.get("/update", (req, res) => {
	    db.updateMany("home", "mine", {"age":"23"},{$set:{"sex":"男"}}, (err, result) => res.send(result));
	});
	
	// 运行服务器   监听127.0.0.1:300端口 (端口号可以任意改)
	app.listen(3000);

这是 directorys文件夹同级目录下的 MongoModule.js ,封装着与数据库的具体操作的模块

// 任何数据库的操作,都是先连接数据库!所以可以将连接数据库封装成函数

// 引入mongodb模块
let MongoClient = require('mongodb').MongoClient;

// 连接数据库 执行相应操作
function _connectDB(dbName, callback) {
    let url = 'mongodb://localhost:27017/' + dbName;    
    MongoClient.connect(url, (err, db) => {
        if(err)     return "数据库连接失败";
        console.log("Database Connect Success"); 
        callback(err,db);
    });
}

// 1. 插入数据
exports.insertOne = function(dbName, collectionName, json, callback) {
    _connectDB(dbName, (err, db) => {
        db.collection(collectionName).insertOne(json, (err, result) => {
            if(err)     return "插入失败";
            callback(err, result);
            db.close();
        });
    });
}

// 2. 删除数据
exports.deleteMany = function(dbName, collectionName, json, callback) {
    _connectDB(dbName, (err, db) => {
        db.collection(collectionName).deleteMany(json, (err, result) => {
            if(err)     return "插入失败";
            callback(err, result);
            db.close();
        });
    });
}

// 3. 修改数据
exports.updateMany = function(dbName, collectionName, jsonOld,jsonNew, callback) {
    _connectDB(dbName, (err, db) => {
        db.collection(collectionName).updateMany(jsonOld, jsonNew, (err, result) => {
            if(err)     return "插入失败";
            callback(err, result);
            db.close();
        });
    });
}

// 4. 查找数据  
exports.find = function(option) {
    _connectDB(option.dbName, (err, db) => {
        db.collection(option.collectionName).find(option.json)
        .limit(option.pageAttr.pageAmount)      // 每页数据量
        .skip(option.pageAttr.page)             // 第page页
        .sort(option.sort)                      // 排序
        .toArray((err, result) => {
            if(err)     return "查询失败";
            option.callback(err, result);
            db.close();
        });
    }); 
}

(3)MongoDB

フォアグラウンドから送信されたデータをデータベースに送信し、クエリデータをフォアグラウンドに戻すには、サーバーが最初にデータベースを起動する必要があります
  。mongod --dbpathデータが保存されるパス(データを保存するフォルダー)
 
MongoDBの一般的に使用されるSQLステートメント:(端末操作の説明)
  データベースmongoを使用して(端末を再起動)
  データインポートするmongoimport
  すべてのデータベースを一覧   表示する   dbを
  使用する/データベースを作成する使用xxx
現在のデータベースを
表示するdb現在のデータベースでコレクションを表示するコレクションを表示する

终端输出前台提交至数据库的数据
ここに画像の説明を挿入
MongoDB图形化界面显示前台发送的数据
ここに画像の説明を挿入
浏览器打印后台数据返回的数据(返されたデータは、フォアグラウンドのxhr.responseTextを介して受信され、JOSN.paser()を使用して配列/オブジェクトに変換されます)ここに画像の説明を挿入

3.イラストここに画像の説明を挿入

~~~~~~~~~~~~~終了~~~~~~~~~~~~~~

元の記事を40件公開 31 獲得 ビュー2767

おすすめ

転載: blog.csdn.net/CodingmanNAN/article/details/104731829