ExpressJs - 路线参数没有显示在req.params属性中

时间:2016-10-12 03:06:44

标签: javascript node.js rest express mongoose

nodejs世界的新手。尝试用express创建一个REST服务,我试图调试这个问题...我想调用一个在router.use('/applications/:appId/messages', messageRoutes);中有一个路由参数的GET资源

index.js

import Promise from 'bluebird';
import mongoose from 'mongoose';
import config from './config/env';
import app from './config/express';

// plugin bluebird promise in mongoose
mongoose.Promise = Promise;

// connect to mongo db
mongoose.connect(config.db, { server: { socketOptions: { keepAlive: 1 } } });
mongoose.connection.on('error', () => {
  throw new Error(`unable to connect to database: ${config.db}`);
});

const debug = require('debug')('express-mongoose-es6-rest-api:index');

// listen on port config.port
app.listen(config.port, () => {
  debug(`server started on port ${config.port} (${config.env})`);
});

export default app;

/config/express.js

import express from 'express';
import bodyParser from 'body-parser';
import routes from '../server/routes';

const app = express();

// parse body params and attache them to req.body
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

[...]

// mount all routes on /api path
app.use('/api', routes);


[...]

export default app;

/server/routes/index.js

import express from 'express';
import userRoutes from './user';
import messageRoutes from './message';
import applicationRoutes from './application';
import authRoutes from './auth';

const router = express.Router(); // eslint-disable-line new-cap

// mount message routes at /messages
router.use('/applications/:appId/messages', messageRoutes);

export default router;

/server/routes/message.js

import express from 'express';
import validate from 'express-validation';
import paramValidation from '../../config/param-validation';
import messageCtrl from '../controllers/message';

const router = express.Router(); // eslint-disable-line new-cap

router.route('/')
   /** GET /api/applications/:appId/messages - Get list of messages */
  .get(messageCtrl.getByAppId);

export default router;

/server/controllers/message.js

import mg from 'mongoose'
import Message from '../models/message';
import moment from 'moment';

function getByAppId(req, res, next) {
  //return res.json(req.message);
  console.log(req);
}

export default {getByAppId};

console.log(req)的结果是请求对象的打印输出,但是params数组是空白的。

 baseUrl: '/api/applications/57fcf8129eb1d52f1cb10332/messages',
 originalUrl: '/api/applications/57fcf8129eb1d52f1cb10332/messages/',
 _parsedUrl:
  Url {
    protocol: null,
    slashes: null,
    [...]
 params: {},
 query: {},

有人可以提供任何指导吗?非常感激。不确定为什么params是空白的。可能是快递:appId声明中的router.use()变量声明吗?

0 个答案:

没有答案