javascript - Req.params.id 未定义

标签 javascript node.js express

在呈现用户的个人资料页面时,我尝试通过访问 app.js 中的路由 /users/:id 来访问用户的 id。该路由由中间件 app.use('/users/:id', userProfile); 处理。

我收到的错误是404错误:未找到。根据返回给客户端的内容,它由 app.js 中的中间件处理,后面带有注释“catch 404 andforward to error handler”的路由声明。我不确定我做错了什么。我的代码哪里有错误?

app.js

var express = require('express');
var stormpath = require('express-stormpath');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

// include routes
var mainPage = require('./routes/mainPage');
var users = require('./routes/user');
var userProfile = require('./routes/userProfile');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// routes
app.use('/', mainPage);
app.use('/api/users', users);
app.use('/users/:id', userProfile);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});


module.exports = app;

userProfile.js

var User = require('../models').sequelize.models.User;
var express = require('express');
var router = express.Router();

router.get('/:id', function(req, res, next) {
    User.findById({
        id: req.params.id
    })
    .then(function(user) {
        if(!user) {
            var err = new Error('Not Found');
            err.status = 404;
            next(err);
        } else
            res.render('userProfile', { user: user }); 
    });
});

module.exports = router;

userProfile.jade

extends layout

block content
    #page-wrapper
        .container
            h2 User #{user.id}

最佳答案

在您的 app.js 中,更改

app.use('/users/:id', userProfile);

app.use('/users', userProfile);

因为您已经在 userProfile.js 中指定了 /:id

关于javascript - Req.params.id 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31227212/

相关文章:

javascript - 切换后滚动到底部?

javascript - 使用 JavaScript 返回数据

node.js - 使用nodejs将otp发送到所需的手机号码

javascript - 动态 HTML 内容页面,如 Dropbox 和 Soundcloud

javascript - "[object Function]"是内置函数独有的吗?

javascript - Node JS promise 链

node.js - 如何在 Express 中通过一个 post 请求保存不同的对象?

javascript - ExpressJS > 路由器中间件 > 通过重定向传递变量 req.foo 不起作用

javascript - 在 google-map-react 中向 Google map 添加标记

node.js - ZINTERSTORE 与 node_redis 的动态参数