摘要:之前我們學(xué)習(xí)了的命令,現(xiàn)在我們再一個小小的項目中使用一下吧我們先來初始化一個項目第一步全局安裝第二步初始化一個項目第三步第四步啟動然后在瀏覽器中打開網(wǎng)址就可以看到這個應(yīng)用了。
之前我們學(xué)習(xí)了Mongodb 的Shell命令, 現(xiàn)在我們再一個小小的node項目中使用一下mongodb吧
我們先來初始化一個express項目
第一步
$ npm install express-generator -g // 全局安裝
第二步
$ express testmongodb // 初始化一個項目
第三步
$ cd testmongodb
$ cnpm install
第四步
// 啟動 $ npm start 然后在瀏覽器中打開 http://localhost:3000/ 網(wǎng)址就可以看到這個應(yīng)用了。
更改目錄結(jié)構(gòu)
| 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"; // 這里是我的數(shù)據(jù)庫名稱哦 module.exports = { "dburl": baseUrl + dbbase };
// db.js /** * 數(shù)據(jù)庫封裝 * */ var MongodbClient = require("mongodb").MongoClient var assert = require("assert") var config = require("../config/config.js") /** * 連接數(shù)據(jù)庫 */ function __connectDB(callback) { MongodbClient.connect(config.dburl, function (err, db) { callback(err, db) }) } /** * 插入一條數(shù)據(jù) * @param {*} collectionName 集合名 * @param {*} Datajson 寫入的json數(shù)據(jù) * @param {*} callback 回調(diào)函數(shù) */ function __insertOne(collectionName, Datajson, callback) { __connectDB(function (err, db) { var collection = db.collection(collectionName); collection.insertOne(Datajson, function (err, result) { callback(err, result); // 通過回調(diào)函數(shù)上傳數(shù)據(jù) db.close(); }) }) } /** * 查找數(shù)據(jù) * @param {*} collectionName 集合名 * @param {*} Datajson 查詢條件 * @param {*} callback 回調(diào)函數(shù) */ function __find(collectionName, JsonObj, callback) { var result = []; if (arguments.length != 3) { callback("find函數(shù)必須傳入三個參數(shù)哦", 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模塊來判斷是否出錯了 // 如果出錯了,那么下面的也將不會執(zhí)行了 if (doc != null) { result.push(doc) } else { callback(null, result) db.close(); } }) } }) } /** * * 刪除數(shù)據(jù)(刪除滿足條件的所有數(shù)據(jù)哦) * @param {*} collectionName 集合名 * @param {*} json 查詢的json數(shù)據(jù) * @param {*} callback 回調(diào)函數(shù) */ 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(); //關(guān)閉數(shù)據(jù)庫 } ); }); } /** * 修改數(shù)據(jù) * @param {*} collectionName 集合名 * @param {*} json1 查詢的對象 * @param {*} json2 修改 * @param {*} callback 回調(diào)函數(shù) */ 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() } ) }) } /** * 獲取總數(shù) * @param {*} collectionName 集合名 * @param {*} json 查詢條件 * @param {*} callback 回調(diào)函數(shù) */ function __getCount(collectionName, json, callback) { __connectDB(function (err, db) { db.collection(collectionName).count(json).then(function (count) { callback(count) db.close(); }) }) } /** * 分頁查找數(shù)據(jù) * @param {*} collectionName 集合名 * @param {*} JsonObj 查詢條件 * @param {*} C 【可選】傳入的參數(shù),每頁的個數(shù)、顯示第幾頁 * @param {*} C callback */ function __findByPage(collectionName, JsonObj, C, D) { var result = []; //結(jié)果數(shù)組 if (arguments.length == 3) { //那么參數(shù)C就是callback,參數(shù)D沒有傳。 var callback = C; var skipnumber = 0; //數(shù)目限制 var limit = 0; } else if (arguments.length == 4) { var callback = D; var args = C; //應(yīng)該省略的條數(shù) var skipnumber = args.pageamount * args.page || 0; //數(shù)目限制 var limit = args.pageamount || 0; //排序方式 var sort = args.sort || {}; } else { throw new Error("find函數(shù)的參數(shù)個數(shù),必須是3個,或者4個。"); return; } //連接數(shù)據(jù)庫,連接之后查找所有 __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(); //關(guān)閉數(shù)據(jù)庫 return; } if (doc != null) { result.push(doc); //放入結(jié)果數(shù)組 } else { //遍歷結(jié)束,沒有更多的文檔了 callback(null, result); db.close(); //關(guān)閉數(shù)據(jù)庫 } }); }); } module.exports = { __connectDB, __insertOne, __find, __DeleteMany, __updateMany, __getCount, __findByPage } // db.js 文件是數(shù)據(jù)庫操作的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") // 引入數(shù)據(jù)庫封裝好的 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" }); }); // 測試數(shù)據(jù)庫連接 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: "連接數(shù)據(jù)庫成功" }) }) }) // 測試插入數(shù)據(jù) 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: "插入一條數(shù)據(jù)成功" }) } else { console.log(err) } }) }) // 查找數(shù)據(jù) 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) } }) }) // 刪除數(shù)據(jù)(刪除符合條件的全部數(shù)據(jù)哦) 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) } }) }) // 修改數(shù)據(jù)(滿足條件的數(shù)據(jù)全部都會被修改) 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: "修改成功" }) } } ) }) // 統(tǒng)計總數(shù) router.get("/count", function (req, res) { global.db.__getCount("student", {}, function (count) { console.log(count) res.render("index", { title: `一共${count}條數(shù)據(jù)` }) }) }) // 分頁顯示 // page是頁數(shù),從 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測試一下路由吧,再看看自己數(shù)據(jù)庫中是否進(jìn)行了相關(guān)操作了呢~
感謝支持!!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/19215.html
摘要:我把代碼上傳到了目錄文件夾下。而當(dāng)你用時,這個的啟動并不是賬號,一般是賬號,因而自然訪問不了一些的文件和文件夾了。解決方法直接把該文件刪除掉用用戶啟動就行了。設(shè)置開機(jī)啟動在中添加之后重啟 項目演示地址:http://115.159.155.118:3002/ 在騰訊云服務(wù)器上配置nodejs環(huán)境 CentOS6.5 一、配置服務(wù)器環(huán)境 1.用xshell登錄服務(wù)器2.把yum更新到最新...
摘要:我把代碼上傳到了目錄文件夾下。而當(dāng)你用時,這個的啟動并不是賬號,一般是賬號,因而自然訪問不了一些的文件和文件夾了。解決方法直接把該文件刪除掉用用戶啟動就行了。設(shè)置開機(jī)啟動在中添加之后重啟 項目演示地址:http://115.159.155.118:3002/ 在騰訊云服務(wù)器上配置nodejs環(huán)境 CentOS6.5 一、配置服務(wù)器環(huán)境 1.用xshell登錄服務(wù)器2.把yum更新到最新...
摘要:一前言因公司需要選用做全文檢索,持久化存儲選用的是,但是希望里面的數(shù)據(jù)發(fā)生改變可以實時同步到上,一開始主要使用的版本,可以搞定這個問題。或者修改中的某一條數(shù)據(jù),也會實時同步到中。如何把的主文檔和附件信息都同步到中利用的來實現(xiàn)。 一、前言 因公司需要選用elasticsearch做全文檢索,持久化存儲選用的是mongodb,但是希望mongodb里面的數(shù)據(jù)發(fā)生改變可以實時同步到elast...
摘要:搭建簡單登錄注冊還是我又來了近來突然對數(shù)據(jù)庫和后臺有點(diǎn)感興趣就開始了漫長的學(xué)習(xí)之路想想自己只是一個前端只會斯科瑞普所以就開始看看著看著突然發(fā)現(xiàn)和更配哦遂就開了我的之路由于我的表達(dá)能力有限下面的文章可能寫的不是那么詳細(xì)有看不懂的可以去我上看源 nodejs+mongodb搭建簡單登錄注冊 biu!biu!biu!還是我又來了!!! 近來突然對數(shù)據(jù)庫和后臺有點(diǎn)感興趣,就開始了漫長的學(xué)習(xí)之...
閱讀 1885·2021-09-24 09:48
閱讀 3232·2021-08-26 14:14
閱讀 1686·2021-08-20 09:36
閱讀 1475·2019-08-30 15:55
閱讀 3635·2019-08-26 17:15
閱讀 1433·2019-08-26 12:09
閱讀 614·2019-08-26 11:59
閱讀 3331·2019-08-26 11:57