如何通过Angular,Express和Mongoose执行请求放置?

一个朋友和我正在试图弄清楚在这个代码中,教程产生了什么。 我们关心的是客户机/服务器的stream程是factory.js的第8行:

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); }); }); 

这是一个要点,以防万一,人们更喜欢它: https : //gist.github.com/drknow42/fe1f46e272a785f8aa75

我们认为我们理解的是:

  1. factory.js发送一个put请求到服务器
  2. expressRouter.js查找put请求,发现有一个路由并从MongoosePost.js中调用post.upvote方法(它是如何知道要使用哪个post?并且请求body的?)
  3. Mongoose执行时会为正在发送的post增加1,然后执行expressRouter.js中的callback

我们不明白res.json(post)做了什么,我们也不明白它是如何知道实际看到的是什么职位。

这是RESTful服务的一些基本规则。 默认的宁静路线是:

 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 

当您需要更新模型时,您正在向/ model /:id发送请求。 根据请求中的ID,它会find一个模型,以便更新。 在你的情况下,ID是:在URL中发布。 请求主体包含此模型的新/更新字段。 res.json()将模型上的新版本发送到客户端的angular.js代码。