在呈现用户的个人资料页面时,我尝试通过访问 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/