Expressjs在不同的路线上安装api“无法读取未定义的属性'句柄'

时间:2014-05-18 00:57:05

标签: node.js express

我想要实现的是我的静态加载在/上,api挂载在/api

这是我的主要文件:

var express = require('express');
var server = express();
var app = require('./api/app');

server.use(express.static('/', __dirname + '/public'));
server.use('/api', app(server));

server.listen(3000);

我的app.js文件:

module.exports = function(app) {
        app.get('/users/:id', function(req, res, next){
            res.json(req.params);
        });
    }

我收到Cannot read property 'handle' of undefined错误。我仍然没有完全了解表达' use并且我确定我犯了一个非常新手的错误,但我不确定如何配置以获得我想要的结果。

感谢。

2 个答案:

答案 0 :(得分:0)

您应该使用路由器而不是Express 4.x:

// main.js
var express = require('express');
var server = express();
var api = require('./api/app');

server.use(express.static('/', __dirname + '/public'));
server.use('/api', api());

server.listen(3000);


// ./api/app.js
var router = require('express').Router();
module.exports = function() {
  router.get('/users/:id', function(req, res, next){
    res.json(req.params);
  });
  return router;
};

答案 1 :(得分:0)

use期望得到一个中间件函数,但在这个例子中它实际上没有得到任何东西(注意app.js中没有return值)。解决此问题的一种方法是返回快速“Router中间件:

的实例
var express = require('express');

module.exports = function(app) {
  var apiRouter = express.Router();
  apiRouter.get('/users/:id', function(req, res, next){
    res.json(req.params);
  });

  return apiRouter;
};