2015-05-06 14 views
6

Un amico e io stiamo cercando di capire esattamente cosa sta succedendo in questo codice prodotto da un tutorial. Siamo preoccupati per il flusso del client/server è ancora una linea si chiama 8 di factory.js:Come funziona una richiesta put attraverso Angular, Express e Mongoose?

factory.js

app.factory('postFactory', ['$http', function($http) 
{ 
    var o = { 
     posts: [] 
    }; 

    o.upvote = function(post){ 
    return $http.put('/posts/' + post._id + "/upvote").success(function(data){ 
     post.upvotes += 1; 
    }); 
    }; 

    return o; 
}]); 

MongoosePost.js

var mongoose = require('mongoose'); 

var PostSchema = new mongoose.Schema({ 
    title: String, 
    url: String, 
    upvotes: {type: Number, default: 0}, 
    comments: [{type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }] 
}); 

PostSchema.methods.upvote = function(cb) 
{ 
    this.upvotes += 1; 
    this.save(cb); 
} 

mongoose.model('Post', PostSchema); 

expressRouter.js

var express = require('express'); 
var router = express.Router(); 
var mongoose = require('mongoose'); 
var Post = mongoose.model('Post'); 
var Comment = mongoose.model('Comment'); 

router.put('/posts/:post/upvote', function(req, res, next) 
{ 
    req.post.upvote(function(err, post) 
    { 
     if(err) { return next(err); } 
     console.log(post); 
     res.json(post); 
    }); 
}); 

Ecco un succo appena nel caso le persone lo preferiscono: https://gist.github.com/drknow42/fe1f46e272a785f8aa75

ciò che pensiamo di comprendere:

  1. factory.js invia una richiesta al server put
  2. expressRouter.js guarda per la richiesta di put e scopre che c'è un percorso e chiede il palo .upvote metodo da MongoosePost.js (Come sa cosa post da utilizzare? ed è REQ il corpo?)
  3. Mongoose esegue aggiunge 1 upvote al post inviato e poi esegue il callback si trovano in expressRouter.js

Non capiamo cosa res.json (post) non e ancora una volta, non capiamo come sia in grado di capire quale post guardare realmente.

risposta

1

Sono alcune regole di base dei servizi RESTful. Predefinito percorso rilassante è:

Verb Path Description 
GET /post Get all posts 
GET /post/create Page where you can create post 
POST /post Method to create post in DB 
GET /post/:post Show post by id 
GET /post/:post/edit Page where you can edit post 
PUT/PATCH /post/:post Method to update post in DB 
DELETE /post/:post Method to delete post in DB 

Quando è necessario aggiornare un modello, si sta inviando richiesta/modello /: id. Sulla base dell'ID dalla richiesta, troverà un modello da aggiornare. Nel tuo caso, id è: post in url. Il corpo della richiesta contiene i campi nuovi/aggiornati per questo modello. res.json() sta inviando la versione più recente sul modello al codice angular.js lato client.

Problemi correlati