2014-05-18 64 views
1

我所試圖實現的是對/加載我的靜,與API安裝在/apiExpressjs安裝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我的頭,我敢肯定,我做了一個非常新手的錯誤,但不知道如何配置得到我想要的結果。

謝謝。

回答

0

您應該使用路由器,而不是快遞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; 
}; 
0

use預計將收到一箇中間件的功能,但在這個例子中實際上沒有得到任何東西(請注意,有一個在應用程序沒有return值。 JS)。解決此問題的一種方法是返回快件'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; 
}; 
相關問題