99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

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

2021-10-23 14:32 更新

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

在根目錄新建目錄models,然后進入目錄并新建文件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);

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

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

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

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

  • random – 從[Math.random(), 0]生成的包含兩個數(shù)字的數(shù)組,這是一個MongoDB相關的地理標記,為了從數(shù)據(jù)庫隨機抓取一些角色,我們將使用$near操作符,我是從StackOverflow上Random record from MongoDB學到這個技巧。
  • voted – 一個布爾值,為確定角色是否已被投票。如果不設置的話,人們可能會給同一角色反復刷票,現(xiàn)在當請求兩個角色時,只有那些沒有被投票的角色會被獲取。即使有人直接使用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. 應用本身文件——controllers、models、config

最后,為鏈接到數(shù)據(jù)庫,在依賴模塊和Express中間件之間添加下面的代碼,它將在我們啟動Express app的時候發(fā)起一個到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ù)據(jù)庫的hostname以避免硬編碼。

在根目錄新建另一個文件config.js

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

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

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

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

在終端中打開一個新的標簽并運行mongod

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號