Node.js
MongoDB-integratie voor Node.js / Express.js
Zoeken…
Invoering
MongoDB is een van de populairste NoSQL-databases, dankzij de hulp van de MEAN-stack. De interface met een Mongo-database vanuit een Express-app is snel en eenvoudig, als je eenmaal de syntaxis van de nogal ingewikkelde zoekopdrachten begrijpt. We zullen Mongoose gebruiken om ons te helpen.
Opmerkingen
Meer informatie is hier te vinden: http://mongoosejs.com/docs/guide.html
MongoDB installeren
npm install --save mongodb
npm install --save mongoose //A simple wrapper for ease of development
In uw serverbestand (gewoonlijk index.js of server.js genoemd)
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');
}
});
Een Mongoes-model maken
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);
Laten we dit ontleden. MongoDB en Mongoose gebruiken JSON (eigenlijk BSON, maar dat is hier niet relevant) als het gegevensformaat. Bovenaan heb ik een paar variabelen ingesteld om het typen te verminderen.
Ik maak een new Schema
en wijs het toe aan een constante. Het is eenvoudig JSON, en elk attribuut is een ander object met eigenschappen die helpen een consistenter schema af te dwingen. Uniek dwingt nieuwe exemplaren die in de database worden ingevoegd, uiteraard uniek te zijn. Dit is geweldig om te voorkomen dat een gebruiker meerdere accounts maakt op een service.
Vereist is een andere, gedeclareerd als een array. Het eerste element is de Booleaanse waarde en het tweede het foutbericht als de ingevoegde of bijgewerkte waarde niet bestaat.
ObjectIds worden gebruikt voor relaties tussen modellen. Voorbeelden kunnen zijn "Gebruikers hebben veel reacties". Andere attributen kunnen worden gebruikt in plaats van ObjectId. Strings zoals een gebruikersnaam is een voorbeeld.
Ten slotte biedt het exporteren van het model voor gebruik met uw API-routes toegang tot uw schema.
Uw Mongo-database opvragen
Een eenvoudig GET-verzoek. Laten we aannemen dat het model uit het bovenstaande voorbeeld in het bestand ./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);
};
We kunnen de gegevens nu uit onze database halen door een HTTP-verzoek naar dit eindpunt te verzenden. Een paar belangrijke dingen, echter:
- Limit doet precies hoe het eruit ziet. Ik krijg slechts 5 documenten terug.
- Lean verwijdert wat spullen van het onbewerkte BSON, waardoor de complexiteit en overhead worden verminderd. Niet verplicht. Maar handig.
- Bevestig bij het gebruik van
find
plaats vanfindOne
dat dedoc.length
groter is dan 0. Dit komt omdatfind
altijd een array retourneert, dus een lege array zal uw fout niet verwerken tenzij deze op lengte wordt gecontroleerd - Persoonlijk stuur ik graag de foutmelding in dat formaat. Verander het om aan uw behoeften te voldoen. Hetzelfde voor het geretourneerde document.
- De code in dit voorbeeld is geschreven in de veronderstelling dat u deze in een ander bestand hebt geplaatst en niet rechtstreeks op de express-server. Om dit in de server aan te roepen, neemt u deze regels op in uw servercode:
const app = express();
require('./path/to/this/file')(app) //