国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

第十二步:數(shù)據(jù)庫模式

2021-10-23 14:32 更新

第十二步:數(shù)據(jù)庫模式

在根目錄新建目錄models,然后進(jìn)入目錄并新建文件character.js

var mongoose = require('mongoose');

var characterSchema = new mongoose.Schema({
  characterId: { type: String, unique: true, index: true },
  name: String,
  race: String,
  gender: String,
  bloodline: String,
  wins: { type: Number, default: 0 },
  losses: { type: Number, default: 0 },
  reports: { type: Number, default: 0 },
  random: { type: [Number], index: '2d' },
  voted: { type: Boolean, default: false }
});

module.exports = mongoose.model('Character', characterSchema);

一個(gè)模式(schema)是你的MongoDB數(shù)據(jù)庫中的數(shù)據(jù)的一個(gè)表示,你能強(qiáng)迫某些字段必須為特定的類型,甚至決定該字段是否必需、唯一或者僅包含指定的元素。

和抽象的模式相比,一個(gè)模型(model)是和實(shí)踐更接近的對象,包含添加、刪除、查詢、更新數(shù)據(jù)的方法,在上面,我們創(chuàng)建了一個(gè)Character模型并將它暴露出來。

注意:為什么這個(gè)教程仍然使用MongoDB?為什么不使用MySQL、PostgreSQL、CouchDB甚至RethinkDB?這是因?yàn)閷τ谝獦?gòu)建的應(yīng)用來說,我并不真正關(guān)心數(shù)據(jù)庫層到底是什么樣的。我更關(guān)注在前端的技術(shù)棧,因?yàn)檫@是我最感興趣的部分。MongoDB也許并適合所有的使用場景,但它是一個(gè)合適的通用數(shù)據(jù)庫,并且過去3年來我和它相處良好。

這里大多數(shù)字段都能自我解釋,不過randomvoted也許需要更多解釋:

  • random – 從[Math.random(), 0]生成的包含兩個(gè)數(shù)字的數(shù)組,這是一個(gè)MongoDB相關(guān)的地理標(biāo)記,為了從數(shù)據(jù)庫隨機(jī)抓取一些角色,我們將使用$near操作符,我是從StackOverflow上Random record from MongoDB學(xué)到這個(gè)技巧。
  • voted – 一個(gè)布爾值,為確定角色是否已被投票。如果不設(shè)置的話,人們可能會給同一角色反復(fù)刷票,現(xiàn)在當(dāng)請求兩個(gè)角色時(shí),只有那些沒有被投票的角色會被獲取。即使有人直接使用API,已投票的角色也不會再次被投票。

回到server.js,在文件開頭添加下面的代碼:

var mongoose = require('mongoose');
var Character = require('./models/character');

為了保證一致性和系統(tǒng)性,我經(jīng)常按照下面的順序?qū)肽K:

  1. 核心Node.js模塊——path、querystring、http
  2. 第三方NPM庫——mongoose、express、request
  3. 應(yīng)用本身文件——controllers、models、config

最后,為鏈接到數(shù)據(jù)庫,在依賴模塊和Express中間件之間添加下面的代碼,它將在我們啟動Express app的時(shí)候發(fā)起一個(gè)到MongoDB的連接池:

mongoose.connect(config.database);
mongoose.connection.on('error', function() {
  console.info('Error: Could not connect to MongoDB. Did you forget to run `mongod`?');
});

注意:我們將在config.js中設(shè)置數(shù)據(jù)庫的hostname以避免硬編碼。

在根目錄新建另一個(gè)文件config.js

module.exports = {
  database: process.env.MONGO_URI || 'localhost'
};

它將使用一個(gè)環(huán)境變量(如果可用)或降級到localhost,這將允許我們在本地開發(fā)時(shí)使用一個(gè)hostname,而在生產(chǎn)環(huán)境使用另一個(gè),同時(shí)無需修改任何代碼。這種方法對于處理OAuth客戶端key和secret時(shí)特別有用。

現(xiàn)在讓我們將它導(dǎo)入到server.js中:

var config = require('./config');

在終端中打開一個(gè)新的標(biāo)簽并運(yùn)行mongod。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號