为什么我无法使用Express'路由器()' GET'方法

时间:2016-05-05 20:16:31

标签: javascript angularjs node.js mongodb express

我在Angular服务上有一个重载的提取功能' PostSvc' 如果提供用户作为参数,则想法仅返回该用户帖子。否则从数据库中获取所有帖子....

用户是一个'对象'使用以下键从post.ctrl.js传递

{
    username: $scope.currentUser,
    body: $scope.postBody,
    user_id: $scope.currentUser._id
}

这给了我_id字段mongodb / mongoose按预期生成

console.log($scope.currentUser._id)

以下是Mongoose Post模型:

var db = require('../db')

var Post = db.model('Post', {
    username : { type: String, required: true },
    body : { type: String, required: true },
    user_id: { type: String, required: true },
    date : { type: String, required: true, default: Date.now },
})

module.exports = Post

这是分配路由器的server.js文件的片段:

app.use("/api/posts", require("./controllers/api/posts"))

这里是Express' ./ controllers / api / post.js'路由器:

var Post = require('../../models/post')

var router = require('express').Router()

var websockets = require('../../websockets')


// this route works just fine
// returns All posts from the db
//
router.get("/", function(req, res, next) {
    // find all posts from db
    //
    Post.find()
    .sort("-date")
    .exec(function(err, posts) {
        if (err) { return next(err) }
        res.json(posts)
        next()
    })
})

探测器....

router.get("/:user_id", function(req, res, next) {
    var query = {}

    // these messages aren't being logged to console
    // so there's no way the route is being used
    console.log("from the get 'api/posts' method" )
    console.dir(req.params.user_id)

    if (req.params.user_id) {
        query = { user_id: req.params.user_id } // sent from posts.svc.js
    }
    // this query is not executing properly
    // I have no access to the `req.params.user_id`
    // 
    Post.find({ user_id: req.params.user_id })
    .sort("-date")
    .exec(function(err, posts) {
        if (err) { return next(err) }
        res.json(posts)
        next()
    })
})

router.post("/", function(req, res, next) {
    var post = new Post({ body: req.body.body })
    if (!req.auth) { return res.sendStatus(401) }
    post.username = req.auth.username
    post.user_id = req.body.user_id
    post.save(function(err, post) {
        if (err) { return next(err) }
        websockets.broadcast("new_post", post)
        res.status(201).json(post)
    })
})

module.exports = router

最后但并非最不重要的是Angular Service发送了最初的' GET'请求' server.js' - > ' ./控制器/ API / posts.js'等待回应:

angular.module("app").service('PostsSvc', function($http) {
    this.fetch = function(user) {
        var credentials = {}
        if (user) {
            credentials = user

            // checkpoint
            //
            console.dir("from the fetch function " + credentials._id)
            // only return authencated users posts
            return $http.get("/api/posts", {
                params: {
                    user_id: credentials._id // to the posts.js router
                }
            })


            // return all posts otherwise
        } else { return $http.get("/api/posts") }


    }

    this.create = function(post) {
        return $http.post("/api/posts", post)
    }
})

1 个答案:

答案 0 :(得分:0)

我在快递router.get遇到了同样的麻烦。身体是空的。我终于转而使用了一个router.post(),它对我来说非常有效,只要你还用一个帖子请求whi来调用api。