1. 程式人生 > >node.js+mongodb資料庫 搭建後臺

node.js+mongodb資料庫 搭建後臺

首先下載資料庫

連結: https://pan.baidu.com/s/1lw_qal0vcvGm3wiJC-F9xQ 提取碼: ctj5 這裡我提供一下我百度網盤的資料庫安裝包

  1. 建立一個資料夾mymongodb,這裡為mongodb資料庫的安裝位置。
  2. 在此資料夾下建立data資料夾 用來存放資料
  3. 開啟bin資料夾 開啟終端 輸入 mongod  --dbpath  E:\mongodb\data 就會啟動資料庫

 資料庫啟動成功後我們需要安裝一個數據庫視覺化工具

視覺化工具是為了便於管理資料庫,根據個人喜好自行安裝就行

此時開始搭建node服務

上文中已經提到了怎麼搭建node服務,現在來介紹如何連線資料庫

在server.js資料夾中這樣寫

var express = require('express');
var app = express();

//設定跨域訪問
app.use(function (req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
    res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
    if (req.method == 'OPTIONS') {
        res.send(200); /*讓options請求快速返回*/
    } else {
        next();
    }
})

此時有個處理跨域的方法,否則會報跨域的錯誤

連線資料庫,下面連線的是資料庫的預設庫,也可以自己建myList名字的庫

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/runoob";

好接下來開始寫介面,對資料庫的增刪改查

獲取列表:

// 獲取資訊列表
app.get('/shujutongji', function (req, res) {
    var data = [];
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        var dbo = db.db("runoob");
        // var whereStr = {"name":'小明'};  // 查詢條件
        dbo.collection("CarList").find().toArray(function (err, result) { // 返回集合中所有資料
            if (err) throw err; 
            res.send(result);
            db.close();
        })
    });
});

增加資料

function successDate(msg, code,obj) {
    const successData = {
        code: code,
        msg: msg,
        data:obj
    }
    return successData
}
// 新增資訊列表
app.get('/addPreson', function (req, resp) {
    // var url = req.url;
    var obj = {
        name: req.query.name,
        age: req.query.age,
        sex: req.query.sex,
        address: req.query.address,
        height: req.query.height,
    };
    var flag = true
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        var dbo = db.db("runoob");
        dbo.collection("site").find().toArray(function (err, result) { // 返回集合中所有資料
            if (err) throw err;
            result.map((item, index) => {
                if (obj.name == item.name) {
                    flag = false
                    console.log(flag)
                }
            })
            if (flag) {
                console.log(flag + 'sss')
                dbo.collection("site").insertOne(obj, function (err, res) {
                    if (err) throw err;
                    console.log("文件插入成功");
                    resp.send(successDate('新增成功', 200))
                    db.close();
                });
            } else {
                resp.send(successDate('不能新增同名資訊', 400))
            }
            db.close();
        })
    });
});

//刪除某條資訊
app.get('/delete', function (req, resp) {
    // var url = req.url;
    var obj = {
        name: req.query.name
    };
    console.log(obj)
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        var dbo = db.db("runoob");
        dbo.collection("site").deleteOne(obj, function (err, obj) {
            if (err) throw err;
            console.log("文件刪除成功");
            resp.send(successDate('刪除成功', 200))
            db.close();
        });
    });
});

//更改密碼
app.get('/changepwd', function (req, resp) {
    // var url = req.url;
    var user = {'userName':req.query.username}
    var upPwd = {$set:{'passWord':req.query.pwd}}
    console.log(user)
    console.log(upPwd)
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        var dbo = db.db("runoob");
        dbo.collection("userData").updateOne(user,upPwd, function (err, obj) {
            if (err) throw err;
            console.log("密碼修改成功");
            resp.send(successDate('密碼修改成功', 200))
            db.close();
        });
    });
});

post請求寫法,這裡以登入介面作為例子

//輸後臺接收賬號密碼進行判斷,並返回資料
app.post("/login", function (req, resq) {
    //定義一個空字串
    var query = '';
    req.addListener("data", function (d) {
        query += d;
        // console.log(d);
    })
    var flag = true
    //如果資料接收完畢
    req.addListener('end', function () {
        // 將字串解析為物件
        var params = require('querystring').parse(query);

        MongoClient.connect(url, function (err, db) {
            if (err) throw err;
            var dbo = db.db("runoob");
            var whereStr = params // 查詢條件
            dbo.collection("userData").find().toArray(function (err, result) { // 返回集合中所有資料
                if (err) throw err;
                result.map((item, index) => {
                    if (params.userName == item.userName && params.pwd == item.passWord) {
                        var obj = item
                        resq.send(successDate('登入成功', 200,obj));
                        flag = false
                    }
                })
                if (flag) {
                    resq.send(successDate('使用者名稱不存在', 400));
                }
                db.close();
            })
        });
    })
});

在貼上完整的server.js例子

var express = require('express');
var app = express();

//設定跨域訪問
app.use(function (req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
    res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
    if (req.method == 'OPTIONS') {
        res.send(200); /*讓options請求快速返回*/
    } else {
        next();
    }
})
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/runoob";

// 獲取資訊列表
app.get('/shujutongji', function (req, res) {
    var data = [];
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        var dbo = db.db("runoob");
        // var whereStr = {"name":'菜鳥教程'};  // 查詢條件
        dbo.collection("CarList").find().toArray(function (err, result) { // 返回集合中所有資料
            if (err) throw err; 
            res.send(result);
            db.close();
        })
    });
});
// 獲取身份資訊列表
app.get('/preson', function (req, res) {
    var data = [];
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        var dbo = db.db("runoob");
        // var whereStr = {"name":'菜鳥教程'};  // 查詢條件
        dbo.collection("site").find().toArray(function (err, result) { // 返回集合中所有資料
            if (err) throw err;
            res.send(result);
            db.close();
        })
    });
});
// 獲取城市列表
app.get('/cityList', function (req, res) {
    var data = [];
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        var dbo = db.db("runoob");
        // var whereStr = {"name":'菜鳥教程'};  // 查詢條件
        dbo.collection("cityList").find().toArray(function (err, result) { // 返回集合中所有資料
            if (err) throw err;
            res.send(result);
            db.close();
        })
    });
});
function successDate(msg, code,obj) {
    const successData = {
        code: code,
        msg: msg,
        data:obj
    }
    return successData
}
// 新增資訊列表
app.get('/addPreson', function (req, resp) {
    // var url = req.url;
    var obj = {
        name: req.query.name,
        age: req.query.age,
        sex: req.query.sex,
        address: req.query.address,
        height: req.query.height,
    };
    var flag = true
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        var dbo = db.db("runoob");
        dbo.collection("site").find().toArray(function (err, result) { // 返回集合中所有資料
            if (err) throw err;
            result.map((item, index) => {
                if (obj.name == item.name) {
                    flag = false
                    console.log(flag)
                }
            })
            if (flag) {
                console.log(flag + 'sss')
                dbo.collection("site").insertOne(obj, function (err, res) {
                    if (err) throw err;
                    console.log("文件插入成功");
                    resp.send(successDate('新增成功', 200))
                    db.close();
                });
            } else {
                resp.send(successDate('不能新增同名資訊', 400))
            }
            db.close();
        })
    });
});
//刪除某條資訊
app.get('/delete', function (req, resp) {
    // var url = req.url;
    var obj = {
        name: req.query.name
    };
    console.log(obj)
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        var dbo = db.db("runoob");
        dbo.collection("site").deleteOne(obj, function (err, obj) {
            if (err) throw err;
            console.log("文件刪除成功");
            resp.send(successDate('刪除成功', 200))
            db.close();
        });
    });
});

//更改密碼
app.get('/changepwd', function (req, resp) {
    // var url = req.url;
    var user = {'userName':req.query.username}
    var upPwd = {$set:{'passWord':req.query.pwd}}
    console.log(user)
    console.log(upPwd)
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        var dbo = db.db("runoob");
        dbo.collection("userData").updateOne(user,upPwd, function (err, obj) {
            if (err) throw err;
            console.log("密碼修改成功");
            resp.send(successDate('密碼修改成功', 200))
            db.close();
        });
    });
});
//登入視窗處理
//輸後臺接收賬號密碼進行判斷,並返回資料
app.post("/login", function (req, resq) {
    //定義一個空字串
    var query = '';
    req.addListener("data", function (d) {
        query += d;
        // console.log(d);
    })
    var flag = true
    //如果資料接收完畢
    req.addListener('end', function () {
        // 將字串解析為物件
        var params = require('querystring').parse(query);

        MongoClient.connect(url, function (err, db) {
            if (err) throw err;
            var dbo = db.db("runoob");
            var whereStr = params // 查詢條件
            dbo.collection("userData").find().toArray(function (err, result) { // 返回集合中所有資料
                if (err) throw err;
                result.map((item, index) => {
                    if (params.userName == item.userName && params.pwd == item.passWord) {
                        var obj = item
                        resq.send(successDate('登入成功', 200,obj));
                        flag = false
                    }
                })
                if (flag) {
                    resq.send(successDate('使用者名稱不存在', 400));
                }
                db.close();
            })
        });
    })
});
// app.get("*", function(req, res) {
//     res.sendFile(`${__dirname}/view${req.url}`);
// })

app.listen(8889, 'localhost', function() {
    console.log('伺服器開啟成功');
})

此時已經寫好了幾個介面可以通過localhost:8889/login來訪問登入介面了,這只是一個基礎,一個簡單的實現,讓大家簡單的瞭解一下,後續還會假如mongose等操作資料庫的工具