Node.js: salvare i dati nelle API REST

Node.js: salvare i dati nelle API REST

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.

Torna su