2014-05-07 55 views
1

即時通訊目前很新的Node.js - 快遞框架,我試着去模仿MVC模式,到目前爲止,我得到這個Node.js的控制器

app.js

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

var app = module.exports = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
app.set('port', process.env.PORT || 3000); 

app.use(favicon()); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded()); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

require('./routes'); 

/// catch 404 and forwarding 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: {} 
    }); 
}); 

http.createServer(app).listen(app.get('port'), function() { 
    console.log("Running server"); 
}); 

只是一個正常的應用程序.JS與快遞發生器產生了一些修改,現在我的路線/ index.js

app = require('../app'); 

app.get('/test', function(req, res) { 
    require('./controllers/test.js'); 
    test(); 
}); 

app.get('/', function(req, res) { 
    res.send('yankevf'); 
}); 

正如你可以在路由/測試看看是否會尋找模塊/controllers/test.js但因爲世界上沒有實際的模塊,它不會工作..

如何包含文件夾控制器內的文件?因爲我的服務器裏不停搜索node_modules

+0

不知道你在問什麼 – Dalorzo

+1

「我試圖建立一個MVC模式」 - 上帝,爲什麼? –

+0

我的確切感受...... @ Dalorzo – lascort

回答

3

它看起來像你基本上沒有......

從你的問題聽起來好像你的文件夾結構是:

./app.js 
./routes 
    -> index.js 
./controllers 
    -> test.js 

如果是這樣的話,這應工作:

app = require('../app'); 

app.get('/test', function(req, res, next) { 
    test = require('../controllers/test.js'); // Note the path, one directory up 
    // Passing the req, res, next arguments on to your controller allows it to respond 
    // i.e. res.json({msg: 'hello world'}). 
    test(req, res, next); 
}); 

雖然你可能不希望在每一個新的請求負載控制器,而是負載(要求)一次,並將其命名爲每個 - [R eQUEST的:

app = require('../app'); 
testController = require('../controllers/test.js'); 

app.get('/test', function(req, res, next) { 
    // Passing the req, res, next arguments on to your controller allows it to respond 
    // i.e. res.json({msg: 'hello world'}). 
    testController(req, res, next); 
}); 

如果你直接傳遞這些參數來你的控制器(比如你應該),你可以更簡潔地寫:

app = require('../app'); 
testController = require('../controllers/test.js'); 

// Call your controller, automatically passing 'req', 'res', 'next' arguments. 
app.get('/test', testController); 

對於那些自動路由的安裝一個完整的例子,結帳:Express MVC example

+0

如何將res和req對象發送給控制器?所以我可以在控制器上使用res.send .js –

+0

我已經編輯了答案以澄清。在github的快遞倉庫中也有很好的示例應用程序。其中一些是爲了展示如何在MVC風格的後端中使用express。 –