Salvare i dati nelle API REST implementate con Node.js è un'operazione non troppo complessa.
Nella directory root creiamo il file package.json con le dipendenze che andremo ad installare:
{
"name": "api",
"main": "server.js",
"dependencies": {
"express": "4.13.3",
"mongoose": "4.1.3",
"body-parser": "1.13.3"
}
}
A questo punto installiamo le dipendenze:
npm install
Come esempio supponiamo di avere un database chiamato test con una collezione chiamata users. Ciascun utente dispone di uno username e di un'email che saranno ovviamente stringhe. Quindi definiamo il nostro modulo utente:
// /app/models/User.js
var mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1/test');
var Schema = mongoose.Schema;
var User = new Schema({
username: String,
email: String
},{collection: 'users'});
module.exports = mongoose.model('User', User);
A questo punto creiamo il file principale delle nostre API:
// Includiamo i moduli
var express = require('express');
var app = express(); // Inizializzazione di Express
var bodyParser = require('body-parser');
var User = require('./app/models/User');
app.use(bodyParser.urlencoded({ extended: true })); // Includiamo body-parser nell'app
app.use(bodyParser.json());
var port = process.env.PORT || 8080; // Porta in uso
var router = express.Router(); // Routing
// Abilitiamo le richieste CORS
router.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');
next();
});
// Qui gli endpoint del routing
app.use('/api', router); // Il nostro URL iniziale sarà http://dominio:8080/api/
app.listen(port);
Con Express dobbiamo creare un endpoint che riceverà i dati da inserire tramite Mongoose. L'endpoint può essere sia in POST che in PUT. Dobbiamo fare riferimento ai parametri della richiesta:
// Qui gli endpoint del routing
router.route('/register').
post(function(req, res) {
var username = req.query.username;
var email = req.query.email;
// Todo: validazione dei dati
var newUser = new User({
username: username,
email: email
});
newUser.save(function(err, data) {
if(err) {
res.send(err);
} else {
res.json(data);
}
});
});
});
Se tutto è andato a buon fine otterremo un'oggetto JSON di risposta con i dati dell'ultimo utente inserito.