首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在带猫鼬的特快4中使用req.params

如何在带猫鼬的特快4中使用req.params
EN

Stack Overflow用户
提问于 2015-01-28 00:28:42
回答 2查看 9.2K关注 0票数 1

我被困在使用req.params.id来使用Mongoose执行查询。我用角度,但问题不是从这里来的。

我只是把与我的服务器和路由文件有关的代码

routes.js

代码语言:javascript
复制
var Product = require('./models/product');     // My Mongoose model
var express        = require('express');

var router = express.Router(); // Do I really need that ?

// function to retrieve ALL employees (working)

function getEmployees(res){
    Employee.find(function(err, employees) {
    if (err)
        return res.send(err)
    res.json(employees);
    });
};

// function to retrieve ONE employee (not working)

function getEmployeeByID(req,res){
    var query  = Employee.where({ _id: req.params.id });
    query.findOne(function (err, employee) {
        if (err)
            return res.send(err)
        res.json(employee);
        });
    };

module.exports = function(app) {

// !!!!!!!!!!!  PROBLEM IS HERE !!!!!!!!!!!!!!!
app.get('/employees/:employee_id', function(req, res) {
    getEmployeeByID(res);
});


// ALL IS WORKING HERE
app.get('/employees', function(req, res) {
    getEmployees(res);
});

app.post('/employees', function(req, res) {
    Employee.create({
        firstname : req.body.firstname,
        lastname : req.body.lastname,
        age : req.body.age,
        dept : req.body.dept,
        done : false
    }, function(err) {
        if (err)
            res.send(err);
        getEmployees(res);
    });
});


app.delete('/employees/:employee_id', function(req, res) {
    Employee.remove({
        _id : req.params.employee_id
    }, function(err) {
        if (err)
            res.send(err);
        getEmployees(res);
    });
});


app.use('/', router);
module.exports = router;

}; // end module.exports

然后我有我的服务器文件

代码语言:javascript
复制
// modules =================================================
var express        = require('express');
var app            = express();
var mongoose       = require('mongoose');
var bodyParser     = require('body-parser');
var methodOverride = require('method-override');


var db = require('./config/db');
mongoose.connect(db.url);

var port = process.env.PORT || 8080; // set our port

var router = express.Router();

// application -------------------------------------------------------------
router.get('/', function(req, res) {
    res.sendfile('./public/index.html');
});


app.use(bodyParser.json()); // parse application/json 
app.use(bodyParser.json({ type: 'application/vnd.api+json' }));
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(methodOverride('X-HTTP-Method-Override')); 
app.use(express.static(__dirname + '/public')); 

// routes ==================================================
require('./app/routes')(app); // pass our application into our routes

app.listen(port);   
module.exports = app;

问题是,当我登陆“员工”页面时,我有一个错误:

获取http://localhost:8080/employees/undefined 500 (内部服务器错误)

这是正常的,因为我还没有点击一个雇员,所以没有身份证。

但是,即使单击一名员工,也无法检索到它的ID。我的意思是,URL是用/employees/employee_id更改的,但是它不会在函数getEmployeeByID中找到ID。在终端中,即使在单击一个员工之后,所有console.log也会给出未定义的结果。

我尝试了很多例子,骑上了快递4的Docs,但找不到出了什么问题。

如果你能帮忙的话谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-28 01:37:34

调用getEmployeeByID函数的方式出现错误。函数签名需要req然后是res,但是您只向它发送res,这将被错误地视为函数中的req

另外,您应该使用您给它的名称来引用param,意思是req.params.employee_id

现在,您应该实际使用router而不是app,这是在Express4中使用的更经典的方法。

代码语言:javascript
复制
function getEmployeeByID(req, res){
    var query  = Employee.where({ _id: req.params.employee_id }); // <-- Use the correct param name
    query.findOne(function (err, employee) {
        if (err)
            return res.send(err)
        res.json(employee);
        });
    };

module.exports = function(app) {

// User router instead of app
router.get('/employees/:employee_id', function(req, res) {
    getEmployeeByID(req, res); // <-- sending both req and res to the function
});

我从来没有使用moongoose (是mongodb本机驱动程序的用户),所以不能对代码的这一部分进行评论。

票数 1
EN

Stack Overflow用户

发布于 2019-11-24 17:47:06

我解决了这个问题。

userController.js

代码语言:javascript
复制
exports.getUser  = (req, res) => {

const  _id  =  req.params.id        

UserModel.findById(_id).then((user) => {

if (!user) {

return  res.status(404).send()

}         

res.send(user)

}).catch((error) => {

res.status(500).send(error)

})    
}

router.js

router.get('/users/:id', userController.getUser)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28182626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档