2016-09-10 15 views
0

Node.js에 MVC 패턴을 구현 중이며 아래에 설명 된대로 설정했습니다. 나는 로거를 가지고 있기 때문에 localhost에 페이지가 생기고 있고 내 console.log에 '/'가 걸려있다.Node.js MVC 라우팅 문제

는 app.js

var express = require("express"); 
var partials = require("express-partials"); 
var cookies = require("cookie-parser"); 
var session = require("express-session"); 
var uuid  = require("node-uuid"); 
var parser = require("body-parser"); 
var csrf  = require("csurf"); 
var compress = require("express-html-minify"); 

var logger = require("./controllers/logger"); 
var errors = require("./controllers/errors"); 
var utility = require("./controllers/utility"); 

var routes = require("./routes"); 

var app = new express(); 
var port = 80; 

app.set("view engine", "ejs"); 
app.set("views", __dirname + "/views"); 
app.set("view options", {defaultLayout: "layout"}); 

app.use(express.static(__dirname + "/public")); 

app.use(logger.log); 
app.use(partials()); 
app.use(cookies()); 
app.use(session({secret: uuid.v1(), resave: true, saveUninitialized: true})); 
app.use(parser.json()); 
app.use(parser.urlencoded({extended: false})); 
app.use(csrf()); 
app.use(utility.csrf); 
app.use(compress); 
app.use(routes.controller); 

app.use(errors.error); 
app.use(errors.notfound); 

app.listen(port); 
console.log("app listening on port " + port); 

./routes/index.js

var express = require("express"); 

var app = express(); 

var controllers = require("../controllers"); 

exports.controller = function() { 
    app.get("/", controllers.index); 
    app.get("/login", controllers.login); 
    app.post("/login", controllers.process); 
    app.get("/reset", controllers.reset); 
    app.get("/whoops", controllers.whoops); 
}; 

./controllers/index.js

exports.index = function(request, response) { 
    response.render("index", {layout: "layout", title: "Index", cookie: JSON.stringify(request.cookies), session: JSON.stringify(request.session)}); 
}; 

exports.login = function(request, response) { 
    response.render("login", {layout: "layout", title: "Login", cookie: JSON.stringify(request.cookies), session: JSON.stringify(request.session)}); 
}; 

exports.process = function(request, response) { 
    response.render("process", {layout: "layout", title: "Process", username: request.body.username}); 
}; 

exports.reset = function(request, response) { 
    response.render("reset", {layout: "layout", title: "Reset"}); 
}; 

exports.whoops = function(request, response) { 
    response.render("whoops", {layout: "layout", title: "Whoops"}); 
}; 

답변

1

해결하는 데 필요한 변화의 몇 가지가 있습니다 라우터 문제.

파일 "app.js"변경 : -이 경로에 인덱스를 포함하는 필수 아니지만

1) 아래에 언급 한 바와 같이 경로를 변경합니다. 이렇게하면 색인 파일을 명확하게 참조 할 수 있습니다.

var routes = require("./routes/index"); 

2) 교체 "app.use (routes.controller)"아래의 코드

app.use('/', routes); 

파일 "경로 /하는 index.js"변경 코드 : -

교체 아래에 언급 된 파일 내용 : -

이제 요청은 URL에 따라 "controllers/index.js"의 각 메소드로 전달됩니다.

var express = require("express"); 
var router = express.Router(); 

var controllers = require("../controllers/index"); 
router.get("/", controllers.index); 
router.get("/login", controllers.login); 
router.post("/login", controllers.process); 
router.get("/reset", controllers.reset); 
router.get("/whoops", controllers.whoops); 

module.exports = router;