国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

node express mongoose簡(jiǎn)單實(shí)現(xiàn)全棧之增刪改查

AndroidTraveler / 771人閱讀

摘要:作為一個(gè)有志向的前端,怎么能不搞搞全棧呢。。。地址歡迎大家多多交流前端技術(shù)啊,如果大家喜歡的話,請(qǐng)給我一個(gè)小小的哦

作為一個(gè)有志向的前端,怎么能不搞搞全(zhuang)棧(bi)呢。。。
說搞咱就搞啊,后端就用node,數(shù)據(jù)庫(kù)就用mongodb,前端呢,呃,再搞個(gè)node的web框架express,思路搞定,開始搭建我們的環(huán)境,搭建之前還是先看看我們的目標(biāo)和成果

項(xiàng)目的目標(biāo)和成果

1.下載mongodb

mongodb官網(wǎng): https://www.mongodb.com/downl...
下載好代碼好,進(jìn)入bin文件夾,啟動(dòng)./mongod,再新打開一個(gè)terminal(終端),啟動(dòng)./mongo

至此我們的數(shù)據(jù)庫(kù)已經(jīng)搭建完畢,我迫不及待的想進(jìn)行增(zhuang)刪(bi)改(da)查(fa)了。這時(shí)候有的同學(xué)就有疑問了,你這上面不是mongoose嗎,跟mongodb有啥關(guān)系啊,看下圖,簡(jiǎn)單來說,我moogoose可以隨意蹂躪你mongodb里面的數(shù)據(jù),

2.搭建數(shù)據(jù)結(jié)構(gòu)

首先先來連接一下我們的數(shù)據(jù)庫(kù),其次我們來定義一下數(shù)據(jù)結(jié)構(gòu),再搞個(gè)model(mongoose里面叫document)

// 數(shù)據(jù)庫(kù)連接
var uuid = require("node-uuid");
var mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1:27017/mart");

var db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", function() {
    console.log("we are connected");
});

// Schema定義數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)
var ProductSchema = mongoose.Schema({
    id: {
        type: String,
        default: uuid.v1
    },
    name: String,
    price: Number,
    url: String
});

// Schema只是定義了數(shù)據(jù)結(jié)構(gòu),而對(duì)數(shù)據(jù)的處理需要model去實(shí)現(xiàn)
var Product = mongoose.model("Product", ProductSchema);

module.exports = Product;
3.建立前端的頁(yè)面、路由和請(qǐng)求的接口

node+express的搭建這里就不詳細(xì)介紹,對(duì)于大家來說灑灑水啊

var express = require("express");
var path = require("path");
var router = require("./routes");
var bodyParser = require("body-parser");

var app = express();

// view engine set
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())

// 托管靜態(tài)文件
app.use(express.static("public"));

app.use("/", router);

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log("Example app listening at http://%s:%s", host, port);
});

定義增刪改查的接口類型和路由跳轉(zhuǎn),由于偷懶,就先把接口和路由寫在一起了

var express = require("express");
var router = express.Router();
var productModel = require("../mongoose");

router.get("/", function(req, res) {
    res.redirect("/list");
})

router.get("/list", function(req, res) {
    var list = [];
    productModel.find(function(err, products) {
        list = products;
        res.render("list", {
            list
        })
    });
})

// 添加商品
router.post("/admin/add/product", function(req, res) {
    var item = req.body;
    var product = new productModel(req.body);

    product.save(function(err) {
        res.send({
            code: "success",
            data:{}
        })
    });    
})

// 編輯商品
router.post("/admin/edit/product", function(req, res) {
    var item = req.body;
    console.log(item);
    productModel.update({_id: item.id}, item, function(err) {
        res.send({
            code: "success",
            data:{}
        })
    });    
})

// 刪除商品
router.post("/admin/delete/product", function(req, res) {
    console.log(req.body.id);
    productModel.findByIdAndRemove({_id: req.body.id}, {}, 
        function() {
            res.send({
                code: "success",
                data:{}
            })
        }
    )
})

// 搜索商品
router.get("/list/search", function(req, res) {
    var list = [],
        price = {};
    if (req.query.price1) price.$gte = req.query.price1;
    if (req.query.price2) price.$lte = req.query.price2;

    productModel.find({
        price
    }, function(err, products) {
        list = products;
        res.render("list", {
            list
        })
    });
})

module.exports = router;

mongoose具體怎么操作數(shù)據(jù)庫(kù)的,大家可以去查看官網(wǎng)的API哈,http://mongoosejs.com/

結(jié)語

我們簡(jiǎn)單的全棧之旅就結(jié)束了,是不是灰常的簡(jiǎn)單,大家的心情是不是灰常的激動(dòng)(我現(xiàn)在TMD是一個(gè)全棧了,2333333333),具體的操作放在github上,本文只是提供一個(gè)簡(jiǎn)單的思路。
github地址: https://github.com/warplan/no...
歡迎大家多多交流前端技術(shù)啊,如果大家喜歡的話,請(qǐng)給我一個(gè)小小的star哦

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/95012.html

相關(guān)文章

  • 邁出全棧第一步,vue+node+mysql獨(dú)立完成前后端分離的增刪改流程

    摘要:本使用創(chuàng)建本地服務(wù)器,在就能完成全部流程,并不需要線上服務(wù)器。路徑要與后端接口一致。后端返回成功后,前端數(shù)據(jù)中對(duì)應(yīng)的元素也要?jiǎng)h掉,更新視圖。控制器里拿一個(gè)方法出來說一下吧,完整的代碼都在。讀取操作完成后調(diào)用釋放連接。 寫在前面 本文只是本人學(xué)習(xí)過程的一個(gè)記錄,并不是什么非常嚴(yán)謹(jǐn)?shù)慕坛蹋M痛蠹乙黄鸸餐M(jìn)步。也希望大家能指出我的問題。適合有一定基礎(chǔ),志在全棧的前端初學(xué)者學(xué)習(xí),從點(diǎn)擊按鈕...

    fsmStudy 評(píng)論0 收藏0
  • Node.js學(xué)習(xí)之路23——Node.js利用mongoose連接mongodb數(shù)據(jù)庫(kù)

    摘要:類比一下你有一個(gè)巨型停車場(chǎng),里邊分了不同的停車區(qū)集合,這里的,每個(gè)停車區(qū)可以停很多車下文提到的,相當(dāng)于每個(gè)數(shù)據(jù)集合里邊可以有很多張數(shù)據(jù)表。 Node.js利用mongoose連接mongodb數(shù)據(jù)庫(kù) Node.js連接mongodb數(shù)據(jù)庫(kù)有很多種方法,通過mongoose模塊引入是其中的一個(gè)方法 代碼組織結(jié)構(gòu) |---|根目錄 |---|---|connect.js(mongoose測(cè)...

    ssshooter 評(píng)論0 收藏0
  • Node.js學(xué)習(xí)之路23——Node.js利用mongoose連接mongodb數(shù)據(jù)庫(kù)

    摘要:類比一下你有一個(gè)巨型停車場(chǎng),里邊分了不同的停車區(qū)集合,這里的,每個(gè)停車區(qū)可以停很多車下文提到的,相當(dāng)于每個(gè)數(shù)據(jù)集合里邊可以有很多張數(shù)據(jù)表。 Node.js利用mongoose連接mongodb數(shù)據(jù)庫(kù) Node.js連接mongodb數(shù)據(jù)庫(kù)有很多種方法,通過mongoose模塊引入是其中的一個(gè)方法 代碼組織結(jié)構(gòu) |---|根目錄 |---|---|connect.js(mongoose測(cè)...

    jsummer 評(píng)論0 收藏0
  • 使用express+mongoose對(duì)mongodb實(shí)現(xiàn)刪改操作

    摘要:項(xiàng)目地址寫在開頭本文主要分享我如何使用對(duì)實(shí)現(xiàn)增刪改查操作,感謝社區(qū)所有精品文章的幫助,以及的開源項(xiàng)目對(duì)我的啟發(fā)。我們這個(gè)項(xiàng)目是建立一個(gè)班級(jí)學(xué)生管理系統(tǒng),能夠?qū)W(xué)生的姓名及學(xué)號(hào)進(jìn)行增刪改查的操作。 項(xiàng)目地址:https://github.com/jrainlau/mongoose_cru... 寫在開頭 本文主要分享我如何使用express+mongoose對(duì)mongodb實(shí)現(xiàn)增刪改查...

    Markxu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

AndroidTraveler

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<