gpt4 book ai didi

javascript - 为什么我无法使用 Express' Router() 和 'GET' 方法访问我的参数

转载 作者:太空宇宙 更新时间:2023-11-03 22:31:09 25 4
gpt4 key购买 nike

我在 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 服务将初始“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)
}
})

最佳答案

我在express中的router.get也遇到了同样的麻烦。 body 是空的。我最终转而使用 router.post() ,它非常适合我,只要您还使用带 Angular post 请求调用 api。

关于javascript - 为什么我无法使用 Express' Router() 和 'GET' 方法访问我的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37059492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com