Node.js
MongoDB Integration för Node.js / Express.js
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:
- Limit gör exakt hur det ser ut. Jag får bara fem dokument tillbaka.
- Luta remsor bort några saker från rå BSON, vilket minskar komplexiteten och omkostnaderna. Inte nödvändig. Men användbart.
- När du använder
find
istället förfindOne
, bekräfta attdoc.length
är större än 0. Detta beror på attfind
alltid returnerar en matris, så en tom matris hanterar inte ditt fel såvida det inte är kontrollerat för längd - Jag personligen vill skicka felmeddelandet i det formatet. Ändra den så att den passar dina behov. Samma sak för det returnerade dokumentet.
- 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) //