Je suis débutant dans le Nœud (et généralement toutes les de développement web), et j'ai commencé à écrire une API RESTful dans le Nœud. Il y a quelques choses que je vais essayer d'obtenir ma tête autour de.
Mon application utilise l'Express et de la Mangouste, et je suis en utilisant l' express-resource
module pour créer facilement mon CRUD routes pour l'API de ressources. Mais il ya un couple de choses que je suis malheureux, et de penser que je pouvais faire mieux.
La première est la Mangouste. Si je veux écrire des tests pour mon API, je n'ai aucun moyen de buter Mangouste pour le forcer à dans la mémoire de données. Tous les tutoriaux, il semble qu'au point de Mangouste, cependant, et je ne suis vraiment pas sûr de ce que je devrais être en utilisant.
Deuxièmement, ma ressource semble avoir beaucoup de code réutilisable. Est-ce vraiment la meilleure façon de créer une API RESTful dans Node.js? Il existe d'autres modules qui vont m'aider à créer mon CRUD des routes? Je crois qu'il ya des façons dont vous pouvez créer CRUD itinéraires à partir de votre schéma, sans plus de code, mais je ne suis vraiment pas sûr de savoir comment.
J'ai vu des projets en cours tels que Tower.js et CompoundJS (officiellement RailwayJS) qui semblent être ces solutions complètes qui permettent de résoudre beaucoup plus que mes questions ici. Peut-être que je devrais être à les utiliser, mais je n'ai vraiment envie de l'Node.js application à une API et rien de plus. Je fais affaire avec le front-end indépendamment de l'API.
Pour fournir un certain contexte, voici ma situation actuelle. Actuellement, j'ai un modèle défini dans la Mangouste:
var mongoose = require('mongoose')
, Schema = mongoose.Schema
, Link
var LinkSchema = new Schema({
uri: String,
meta: {
title: String,
desc: String
},
shares: [{
uid: Schema.Types.ObjectId,
date: Date,
message: String
}]
})
Link = module.exports = mongoose.model('Link')
Ensuite, je définis les contrôleurs pour le CRUD itinéraires:
var mongoose = require('mongoose')
, _ = require('underscore')
, Link = mongoose.model('Link')
exports.load = function (req, id, fn) {
Link.findById(req.params.link, function (err, link) {
if (err) {
return res.send(err)
}
fn(null, link)
})
}
exports.index = function (req, res) {
var filterByUser = req.query.user ? { 'shares.uid': req.query.user } : {}
Link.find(filterByUser, function (err, links) {
if (err) {
return res.send(err)
}
res.send(links)
})
}
exports.create = function (req, res) {
var link = new Link(req.body)
link.save(function (err) {
if (err) {
// TODO: send 404
return res.send(err)
}
res.send(link)
})
}
exports.show = function (req, res) {
res.send(req.link)
}
exports.update = function (req, res) {
req.link = _(req.link).extend(req.body)
req.link.save(function (err, link) {
if (err) {
return res.send(err)
}
res.send(link)
})
}
exports.patch = exports.update
exports.destroy = function (req, res) {
req.link.remove(function (err) {
if (err) {
return res.send(err)
}
res.send()
})
}
Enfin, j'utilise l' express-resource
module à la carte ces contrôleurs de la nécessaire CRUD sur les routes du haut de l'Express app.
app.resource('api/links', require('../resources/links'))