【问题标题】:How does a put request work through Angular, Express, and Mongoose?put 请求如何通过 Angular、Express 和 Mongoose 工作?
【发布时间】:2015-07-16 02:19:52
【问题描述】:

我和一个朋友正试图弄清楚教程生成的这段代码到底发生了什么。一旦调用了 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 方法(如何 它知道要使用什么帖子吗? req 是主体吗?)
  3. Mongoose 执行为正在发送的帖子添加 1 个赞,然后 执行 expressRouter.js 中的回调

我们不明白 res.json(post) 做了什么,而且我们不明白它如何知道实际查看的帖子。

【问题讨论】:

    标签: javascript angularjs node.js mongodb express


    【解决方案1】:

    这是RESTful服务的一些基本规则。默认的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,它会找到一个要更新的模型。在您的情况下, id 是 :post in url。请求正文包含此模型的新/更新字段。 res.json() 正在向您的客户端 angular.js 代码发送模型的较新版本。

    【讨论】:

      猜你喜欢
      • 2016-12-28
      • 2018-10-15
      • 2018-06-13
      • 2021-09-21
      • 2021-04-28
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      • 2017-03-08
      相关资源
      最近更新 更多