Sök…


Introduktion

MongoDB är en av de mest populära NoSQL-databaserna, tack vare MEAN-stacken. Gränssnittet med en Mongo-databas från en Express-app är snabbt och enkelt, när du först har förstått den typiska-wonky frågesyntaxen. Vi använder Mongoose för att hjälpa oss.

Anmärkningar

Mer information finns här: http://mongoosejs.com/docs/guide.html

Installera MongoDB

npm install --save mongodb
npm install --save mongoose //A simple wrapper for ease of development

I din serverfil (normalt benämnd index.js eller server.js)

const express = require('express');
const mongodb = require('mongodb');
const mongoose = require('mongoose');
const mongoConnectString = 'http://localhost/database name';

mongoose.connect(mongoConnectString, (err) => {
  if (err) {
    console.log('Could not connect to the database');
  }
});

Skapa en Mongoose-modell

const Schema = mongoose.Schema;
const ObjectId = Schema.Types.ObjectId;

const Article = new Schema({
  title: {
    type: String,
    unique: true,
    required: [true, 'Article must have title']
  },
  author: {
    type: ObjectId,
    ref: 'User'
  }
});

module.exports = mongoose.model('Article, Article);

Låt oss dissekera detta. MongoDB och Mongoose använder JSON (faktiskt BSON, men det är irrelevant här) som dataformat. Överst har jag angett några variabler för att minska skrivandet.

Jag skapar ett new Schema och tilldelar det till en konstant. Det är enkelt JSON, och varje attribut är ett annat objekt med egenskaper som hjälper till att upprätthålla ett mer konsekvent schema. Unika tvingar nya instanser att infogas i databasen för att uppenbarligen vara unika. Detta är utmärkt för att förhindra att en användare skapar flera konton på en tjänst.

Nödvändigt är en annan, förklarad som en matris. Det första elementet är det booleska värdet, och det andra felmeddelandet om värdet som infogas eller uppdateras inte kan existera.

ObjectIds används för relationer mellan modeller. Exempel kan vara "Användare har många kommentarer". Andra attribut kan användas istället för ObjectId. Strängar som ett användarnamn är ett exempel.

Slutligen ger export av modellen för användning med dina API-rutter åtkomst till ditt schema.

Fråga din Mongo-databas

En enkel GET-begäran. Låt oss anta att modellen från exemplet ovan finns i filen ./db/models/Article.js .

const express = require('express');
const Articles = require('./db/models/Article');

module.exports = function (app) {
  const routes = express.Router();
  
  routes.get('/articles', (req, res) => {
    Articles.find().limit(5).lean().exec((err, doc) => {
      if (doc.length > 0) {
        res.send({ data: doc });
      } else {
        res.send({ success: false, message: 'No documents retrieved' });
      }
    });
  });

app.use('/api', routes);
};

Vi kan nu hämta data från vår databas genom att skicka en HTTP-begäran till denna slutpunkt. Några viktiga saker, dock:

  1. Limit gör exakt hur det ser ut. Jag får bara fem dokument tillbaka.
  2. Luta remsor bort några saker från rå BSON, vilket minskar komplexiteten och omkostnaderna. Inte nödvändig. Men användbart.
  3. När du använder find istället för findOne , bekräfta att doc.length är större än 0. Detta beror på att find alltid returnerar en matris, så en tom matris hanterar inte ditt fel såvida det inte är kontrollerat för längd
  4. Jag personligen vill skicka felmeddelandet i det formatet. Ändra den så att den passar dina behov. Samma sak för det returnerade dokumentet.
  5. Koden i det här exemplet skrivs under antagandet att du har placerat den i en annan fil och inte direkt på expressservern. Om du vill ringa detta på servern inkluderar du dessa rader i din serverkod:
const app = express();
require('./path/to/this/file')(app) // 


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow