express(5)—mongodb基礎(chǔ)

1萎坷、在node中安裝一個可以連接mongodb數(shù)據(jù)庫的工具mongoose

安裝mongoose命令: npm i mongoose

image.png

2、在server.js中l(wèi)連接mongodb數(shù)據(jù)庫

2.1滤淳、引入mongoose模塊: const mongoose = require('mongoose')
2.2、連接mongodb數(shù)據(jù)庫:mongoose.connect('mongodb://localhost:27017/express-test')

//1脱篙、引入express模塊
const express = require('express');
//2娇钱、創(chuàng)建web服務(wù)器
const app = express();

// 1、引入mongoose模塊
const mongoose = require('mongoose')
// 2绊困、連接mongodb數(shù)據(jù)庫
//  因?yàn)檠b在本地文搂,所以使用localhost或http://127.0.0.1也可以
//                         mongodb://   數(shù)據(jù)庫ip地址   :(默認(rèn)端口號:27017) /數(shù)據(jù)庫名稱
//                             ↓             ↓           ↓                    ↓
// 固定格式mongoose.connect('mongodb://  localhost     :27017            /express-test')
mongoose.connect('mongodb://localhost:27017/express-test')

// 使用app.use(引入cors包)  因?yàn)橐氲腸ors包是一個函數(shù),所以直接調(diào)用
app.use(require('cors')())

// 使用app.use托管靜態(tài)資源秤朗,通過express.static('靜態(tài)資源目錄煤蹭,一般叫public')
// 訪問public里面的靜態(tài)資源一定要通過/static文件夾下才能訪問
app.use('/',express.static('public'))

// 3、注冊路由
app.get('/product',function(req,res){
  res.send([
    {id:1,title:'apple'},
    {id:2,title:'banner'},
    {id:3,title:'lemon'}
  ])
});
//4取视、設(shè)置端口
app.listen(3000,()=>{
  console.log('App listening on port 3000!')//服務(wù)器啟動后會打印這句話
})

3硝皂、啟動server.js,發(fā)現(xiàn)有兩個警告

image.png

4作谭、在server.js中添加兩個參數(shù){ useNewUrlParser: true,useUnifiedTopology: true }即可

//1稽物、引入express模塊
const express = require('express');
//2、創(chuàng)建web服務(wù)器
const app = express();


// 1折欠、引入mongoose模塊
const mongoose = require('mongoose')
// 2贝或、連接mongodb數(shù)據(jù)庫
//  因?yàn)檠b在本地吼过,所以使用localhost或http://127.0.0.1也可以
//                         mongodb://   數(shù)據(jù)庫ip地址   :(默認(rèn)端口號:27017) /數(shù)據(jù)庫名稱
//                             ↓             ↓           ↓                    ↓
// 固定格式mongoose.connect('mongodb://  localhost     :27017            /express-test')
mongoose.connect('mongodb://localhost:27017/express-test',{ useNewUrlParser: true , useUnifiedTopology: true })

// 使用app.use(引入cors包)  因?yàn)橐氲腸ors包是一個函數(shù),所以直接調(diào)用
app.use(require('cors')())

// 使用app.use托管靜態(tài)資源咪奖,通過express.static('靜態(tài)資源目錄盗忱,一般叫public')
// 訪問public里面的靜態(tài)資源一定要通過/static文件夾下才能訪問
app.use('/',express.static('public'))

// 3、注冊路由
app.get('/product',function(req,res){
  res.send([
    {id:1,title:'apple'},
    {id:2,title:'banner'},
    {id:3,title:'lemon'}
  ])
});
//4羊赵、設(shè)置端口
app.listen(3000,()=>{
  console.log('App listening on port 3000!')//服務(wù)器啟動后會打印這句話
})

5趟佃、再一次啟動時已經(jīng)沒有任何警告了

image.png

6、創(chuàng)建一個產(chǎn)品表

6.1昧捷、通過mongoose.model建立一個模型來創(chuàng)建一個產(chǎn)品表

// 創(chuàng)建產(chǎn)品表 
// 通過mongoose.model建立一個模型闲昭,第一個參數(shù)為模型的名稱 ,第二個參數(shù)為表結(jié)構(gòu)
// 通過new mongoose.Schema({title:String})創(chuàng)建一個表結(jié)構(gòu)料身,里面?zhèn)鬟f一個對象汤纸,對象中寫字段/屬性(即一個產(chǎn)品中有哪些屬性)
const Product = mongoose.model('Product',new mongoose.Schema({
  //屬性名:屬性類型
    title:String
}))

6.2、為了測試芹血,就在server.js插入多條數(shù)據(jù)贮泞,服務(wù)器啟動后就需要把插入語句注釋掉,防止多次執(zhí)行幔烛,正常來說數(shù)據(jù)是從數(shù)據(jù)庫中執(zhí)行插入的


// 為了測試啃擦,通過insertMany向product插入3條數(shù)據(jù)
// 第一次執(zhí)行后就已經(jīng)插入了數(shù)據(jù),所以需要注釋掉饿悬,以免反復(fù)插入
Product.insertMany([
  {title:'產(chǎn)品1'},
  {title:'產(chǎn)品2'},
  {title:'產(chǎn)品3'}
])

6.3令蛉、當(dāng)通過http://localhost:3000/product訪問時,會去查找Product中的數(shù)據(jù)

app.get('/product',async function(req,res){
  // 每一次的數(shù)據(jù)庫查詢都是從node.js服務(wù)器里面去異步操作連接mongodb數(shù)據(jù)庫狡恬,所以要加await
  // 只要使用await珠叔,外出的函數(shù)就需要添加async,因?yàn)閍wait和async是成對使用的
  res.send(await Product.find())//通過find查找Product中的信息
});

訪問結(jié)果:_id是mongodb往數(shù)據(jù)庫存一條信息時會自動添加的一個id弟劲; __v是版本號

image.png

server.js整體代碼:

//1祷安、引入express模塊
const express = require('express');
//2、創(chuàng)建web服務(wù)器
const app = express();

// 1兔乞、引入mongoose模塊
const mongoose = require('mongoose')
// 2汇鞭、連接mongodb數(shù)據(jù)庫
//  因?yàn)檠b在本地,所以使用localhost或http://127.0.0.1也可以
//                         mongodb://   數(shù)據(jù)庫ip地址   :(默認(rèn)端口號:27017) /數(shù)據(jù)庫名稱
//                             ↓             ↓           ↓                    ↓
// 固定格式mongoose.connect('mongodb://  localhost     :27017            /express-test')
mongoose.connect('mongodb://localhost:27017/express-test',{ useNewUrlParser: true , useUnifiedTopology: true })

// 創(chuàng)建產(chǎn)品表 
// 通過mongoose.model建立一個模型庸追,第一個參數(shù)為模型的名稱 霍骄,第二個參數(shù)為表結(jié)構(gòu)
// 通過new mongoose.Schema({title:String})創(chuàng)建一個表結(jié)構(gòu),里面?zhèn)鬟f一個對象淡溯,對象中寫字段/屬性(即一個產(chǎn)品中有哪些屬性)
const Product = mongoose.model('Product',new mongoose.Schema({
  //屬性名:屬性類型
    title:String
}))

// 為了測試读整,通過insertMany向product插入3條數(shù)據(jù)
// 第一次執(zhí)行后就已經(jīng)插入了數(shù)據(jù),所以需要注釋掉咱娶,以免反復(fù)插入
// Product.insertMany([
//   {title:'產(chǎn)品1'},
//   {title:'產(chǎn)品2'},
//   {title:'產(chǎn)品3'}
// ])

// 使用app.use(引入cors包)  因?yàn)橐氲腸ors包是一個函數(shù)绘沉,所以直接調(diào)用
app.use(require('cors')())

// 使用app.use托管靜態(tài)資源煎楣,通過express.static('靜態(tài)資源目錄,一般叫public')
// 訪問public里面的靜態(tài)資源一定要通過/static文件夾下才能訪問
app.use('/',express.static('public'))

// 3车伞、注冊路由
app.get('/product',async function(req,res){
  // 每一次的數(shù)據(jù)庫查詢都是從node.js服務(wù)器里面去異步操作連接mongodb數(shù)據(jù)庫,所以要加await
  // 只要使用await喻喳,外出的函數(shù)就需要添加async另玖,因?yàn)閍wait和async是成對使用的
  res.send(await Product.find())//通過find查找Product中的信息
});
//4、設(shè)置端口
app.listen(3000,()=>{
  console.log('App listening on port 3000!')//服務(wù)器啟動后會打印這句話
})
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末表伦,一起剝皮案震驚了整個濱河市谦去,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹦哼,老刑警劉巖鳄哭,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纲熏,居然都是意外死亡妆丘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門局劲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勺拣,“玉大人,你說我怎么就攤上這事鱼填∫┯校” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵苹丸,是天一觀的道長愤惰。 經(jīng)常有香客問我,道長赘理,這世上最難降的妖魔是什么宦言? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮感憾,結(jié)果婚禮上蜡励,老公的妹妹穿的比我還像新娘。我一直安慰自己阻桅,他們只是感情好凉倚,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嫂沉,像睡著了一般稽寒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趟章,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天杏糙,我揣著相機(jī)與錄音慎王,去河邊找鬼。 笑死宏侍,一個胖子當(dāng)著我的面吹牛赖淤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谅河,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼咱旱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绷耍?” 一聲冷哼從身側(cè)響起吐限,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎褂始,沒想到半個月后诸典,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡崎苗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年狐粱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片益缠。...
    茶點(diǎn)故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡脑奠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出幅慌,到底是詐尸還是另有隱情宋欺,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布胰伍,位于F島的核電站齿诞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏骂租。R本人自食惡果不足惜祷杈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渗饮。 院中可真熱鬧但汞,春花似錦、人聲如沸互站。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胡桃。三九已至踩叭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背容贝。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工自脯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斤富。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓膏潮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親满力。 傳聞我的和親對象是個殘疾皇子戏罢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容