摘要:之前我們學習了的命令,現在我們再一個小小的項目中使用一下吧我們先來初始化一個項目第一步全局安裝第二步初始化一個項目第三步第四步啟動然后在瀏覽器中打開網址就可以看到這個應用了。
之前我們學習了Mongodb 的Shell命令, 現在我們再一個小小的node項目中使用一下mongodb吧
我們先來初始化一個express項目
第一步
$ npm install express-generator -g // 全局安裝
第二步
$ express testmongodb // 初始化一個項目
第三步
$ cd testmongodb
$ cnpm install
第四步
// 啟動 $ npm start 然后在瀏覽器中打開 http://localhost:3000/ 網址就可以看到這個應用了。
更改目錄結構
| bin | modle - db.js | config - config.js | views | public | routes - index.js | app.js | package.json
完善代碼階段
$ cnpm install mongodb ---save // 安裝mongodb
// config.js var baseUrl = "mongodb://localhost:27017"; var dbbase = "/mongodb_demo"; // 這里是我的數據庫名稱哦 module.exports = { "dburl": baseUrl + dbbase };
// db.js /** * 數據庫封裝 * */ var MongodbClient = require("mongodb").MongoClient var assert = require("assert") var config = require("../config/config.js") /** * 連接數據庫 */ function __connectDB(callback) { MongodbClient.connect(config.dburl, function (err, db) { callback(err, db) }) } /** * 插入一條數據 * @param {*} collectionName 集合名 * @param {*} Datajson 寫入的json數據 * @param {*} callback 回調函數 */ function __insertOne(collectionName, Datajson, callback) { __connectDB(function (err, db) { var collection = db.collection(collectionName); collection.insertOne(Datajson, function (err, result) { callback(err, result); // 通過回調函數上傳數據 db.close(); }) }) } /** * 查找數據 * @param {*} collectionName 集合名 * @param {*} Datajson 查詢條件 * @param {*} callback 回調函數 */ function __find(collectionName, JsonObj, callback) { var result = []; if (arguments.length != 3) { callback("find函數必須傳入三個參數哦", null) return } __connectDB(function (err, db) { var cursor = db.collection(collectionName).find(JsonObj); if (!err) { cursor.each(function (err, doc) { assert.equal(err, null) // 使用node的assert模塊來判斷是否出錯了 // 如果出錯了,那么下面的也將不會執行了 if (doc != null) { result.push(doc) } else { callback(null, result) db.close(); } }) } }) } /** * * 刪除數據(刪除滿足條件的所有數據哦) * @param {*} collectionName 集合名 * @param {*} json 查詢的json數據 * @param {*} callback 回調函數 */ function __DeleteMany(collectionName, json, callback) { __connectDB(function (err, db) { assert.equal(err, null) //刪除 db.collection(collectionName).deleteMany( json, function (err, results) { assert.equal(err, null) callback(err, results); db.close(); //關閉數據庫 } ); }); } /** * 修改數據 * @param {*} collectionName 集合名 * @param {*} json1 查詢的對象 * @param {*} json2 修改 * @param {*} callback 回調函數 */ function __updateMany(collectionName, json1, json2, callback) { __connectDB(function (err, db) { assert.equal(err, null) db.collection(collectionName).updateMany( json1, json2, function (err, results) { assert.equal(err, null) callback(err, results) db.close() } ) }) } /** * 獲取總數 * @param {*} collectionName 集合名 * @param {*} json 查詢條件 * @param {*} callback 回調函數 */ function __getCount(collectionName, json, callback) { __connectDB(function (err, db) { db.collection(collectionName).count(json).then(function (count) { callback(count) db.close(); }) }) } /** * 分頁查找數據 * @param {*} collectionName 集合名 * @param {*} JsonObj 查詢條件 * @param {*} C 【可選】傳入的參數,每頁的個數、顯示第幾頁 * @param {*} C callback */ function __findByPage(collectionName, JsonObj, C, D) { var result = []; //結果數組 if (arguments.length == 3) { //那么參數C就是callback,參數D沒有傳。 var callback = C; var skipnumber = 0; //數目限制 var limit = 0; } else if (arguments.length == 4) { var callback = D; var args = C; //應該省略的條數 var skipnumber = args.pageamount * args.page || 0; //數目限制 var limit = args.pageamount || 0; //排序方式 var sort = args.sort || {}; } else { throw new Error("find函數的參數個數,必須是3個,或者4個。"); return; } //連接數據庫,連接之后查找所有 __connectDB(function (err, db) { var cursor = db.collection(collectionName).find(JsonObj).skip(skipnumber).limit(limit).sort(sort); cursor.each(function (err, doc) { if (err) { callback(err, null); db.close(); //關閉數據庫 return; } if (doc != null) { result.push(doc); //放入結果數組 } else { //遍歷結束,沒有更多的文檔了 callback(null, result); db.close(); //關閉數據庫 } }); }); } module.exports = { __connectDB, __insertOne, __find, __DeleteMany, __updateMany, __getCount, __findByPage } // db.js 文件是數據庫操作的DAO 層的封裝
//app.js var createError = require("http-errors"); var express = require("express"); var path = require("path"); var cookieParser = require("cookie-parser"); var logger = require("morgan"); var indexRouter = require("./routes/index"); var usersRouter = require("./routes/users"); // 修改【1】 global.db = require("./modle/db.js") // 引入數據庫封裝好的 DAO 層方法 var app = express(); // view engine setup app.set("views", path.join(__dirname, "views")); app.set("view engine", "jade"); app.use(logger("dev")); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, "public"))); // 修改【2】 這里配置我們的路由 app.use("/", indexRouter) app.use("/users", usersRouter) app.use("/testconnect", indexRouter) app.use("/testdeletemany", indexRouter) app.use("/testupdatemany", indexRouter) app.use("/count", indexRouter) app.use("/testfingbypage", indexRouter) // catch 404 and forward to error handler app.use(function(req, res, next) { next(createError(404)); }); // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get("env") === "development" ? err : {}; // render the error page res.status(err.status || 500); res.render("error"); }); module.exports = app;
// index.js // 這里用來配置路由操作 var express = require("express"); var router = express.Router(); /* GET home page. */ router.get("/", function (req, res, next) { res.render("index", { title: "Express" }); }); // 測試數據庫連接 router.get("/testconnect", function (req, res) { global.db.__connectDB(function (err, db) { if (err) { console.log(err) return } console.log(db) res.render("index", { title: "連接數據庫成功" }) }) }) // 測試插入數據 router.get("/testinsert", function (req, res) { global.db.__insertOne("student", { "name": "zjj", "age": 33, "interests": ["play"], "sex": "男" }, function (err, result) { if (!err) { console.log(result) res.render("index", { title: "插入一條數據成功" }) } else { console.log(err) } }) }) // 查找數據 router.get("/testfind", function (req, res) { global.db.__find("student", { age: { $lt: 30 } }, function (err, result) { if (!err) { console.log(result) res.render("index", { title: "查詢成功" }) } else { console.log(err) } }) }) // 刪除數據(刪除符合條件的全部數據哦) router.get("/testdeletemany", function (req, res) { global.db.__DeleteMany("student", { "age": { $gte: 19 } }, function (err, result) { if (!err) { console.log(result) res.render("index", { title: "刪除成功" }) } else { console.log(err) } }) }) // 修改數據(滿足條件的數據全部都會被修改) router.get("/testupdatemany", function (req, res) { global.db.__updateMany( "student", { "name": "zjj" }, { $set: { name: "cnm" } }, function (err, result) { if (!err) { console.log(result) res.render("index", { title: "修改成功" }) } } ) }) // 統計總數 router.get("/count", function (req, res) { global.db.__getCount("student", {}, function (count) { console.log(count) res.render("index", { title: `一共${count}條數據` }) }) }) // 分頁顯示 // page是頁數,從 0 開始 router.get("/testfingbypage", function (req, res) { global.db.__findByPage("student", {}, { "pageamount": 6, "page": 0 }, function (err, result) { if (err) { throw err; } res.send(result); console.log(result.length); }) }) module.exports = router;
啟動一次
$ npm start
打開localhost:3000測試一下路由吧,再看看自己數據庫中是否進行了相關操作了呢~
感謝支持!!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19215.html
摘要:我把代碼上傳到了目錄文件夾下。而當你用時,這個的啟動并不是賬號,一般是賬號,因而自然訪問不了一些的文件和文件夾了。解決方法直接把該文件刪除掉用用戶啟動就行了。設置開機啟動在中添加之后重啟 項目演示地址:http://115.159.155.118:3002/ 在騰訊云服務器上配置nodejs環境 CentOS6.5 一、配置服務器環境 1.用xshell登錄服務器2.把yum更新到最新...
摘要:我把代碼上傳到了目錄文件夾下。而當你用時,這個的啟動并不是賬號,一般是賬號,因而自然訪問不了一些的文件和文件夾了。解決方法直接把該文件刪除掉用用戶啟動就行了。設置開機啟動在中添加之后重啟 項目演示地址:http://115.159.155.118:3002/ 在騰訊云服務器上配置nodejs環境 CentOS6.5 一、配置服務器環境 1.用xshell登錄服務器2.把yum更新到最新...
摘要:一前言因公司需要選用做全文檢索,持久化存儲選用的是,但是希望里面的數據發生改變可以實時同步到上,一開始主要使用的版本,可以搞定這個問題。或者修改中的某一條數據,也會實時同步到中。如何把的主文檔和附件信息都同步到中利用的來實現。 一、前言 因公司需要選用elasticsearch做全文檢索,持久化存儲選用的是mongodb,但是希望mongodb里面的數據發生改變可以實時同步到elast...
摘要:搭建簡單登錄注冊還是我又來了近來突然對數據庫和后臺有點感興趣就開始了漫長的學習之路想想自己只是一個前端只會斯科瑞普所以就開始看看著看著突然發現和更配哦遂就開了我的之路由于我的表達能力有限下面的文章可能寫的不是那么詳細有看不懂的可以去我上看源 nodejs+mongodb搭建簡單登錄注冊 biu!biu!biu!還是我又來了!!! 近來突然對數據庫和后臺有點感興趣,就開始了漫長的學習之...
閱讀 1876·2021-09-24 09:48
閱讀 3220·2021-08-26 14:14
閱讀 1674·2021-08-20 09:36
閱讀 1461·2019-08-30 15:55
閱讀 3628·2019-08-26 17:15
閱讀 1426·2019-08-26 12:09
閱讀 607·2019-08-26 11:59
閱讀 3324·2019-08-26 11:57