我在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)
}
})
答案 0 :(得分:0)
我在快递router.get
遇到了同样的麻烦。身体是空的。我终于转而使用了一个router.post()
,它对我来说非常有效,只要你还用一个帖子请求whi来调用api。