为什么不能使用“GET”方法使用Express'Router()来访问我的参数

如果提供用户作为参数,那么我在Angular服务“PostSvc”上有一个重载的提取函数,这个想法是只返回那个用户的post。 否则从数据库中获取所有post….

用户是使用以下键从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' – >'./controllers/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) } }) 

快递中我也遇到了同样的问题。 身体是空的。 我终于转而使用完全为我工作的router.post() ,只要你也可以用一个post请求来调用api。