2016-08-01 7 views
1

Ich versuche, meine App zu trennen, Routen zu trennen, aber die einzige, die funktioniert, ist die Root-Route, ich weiß nicht, was das Problem mit meinem Code ist, nach dem Lesen der Express Routing, scheint mein Code korrekt geschriebenWarum Routing in Express mit anderen Dateien funktioniert nicht?

app.js

// ... 
var routes = require('./routes/index'); 
var users = require('./routes/users'); 
//Require the external route 
var about = require('./routes/about'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

//Routes 
app.use('/', routes); 
app.use('/users', users); 
//The external route 
app.use('login', login); 

index.js

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

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { title: 'Clazapp' }); 
}); 

module.exports = router; 

log in.js

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

    //login page 
    router.get("/login", function(req, res, next) { 
    res.render('login'); 
    }); 

module.exports = router; 

Wie Sie sehen können, sind der Code der beiden login.js und index.js ziemlich das gleiche, aber die/login Route nicht funktioniert. Erscheint die Meldung:

Error: Failed to lookup view "error" in views directory "/home/cesar/Documentos/node/clazapp2/views" at EventEmitter.render (/home/cesar/Documentos/node/clazapp2/node_modules/express/lib/application.js:579:17) at ServerResponse.render (/home/cesar/Documentos/node/clazapp2/node_modules/express/lib/response.js:961:7) at /home/cesar/Documentos/node/clazapp2/app.js:61:7 at Layer.handle_error (/home/cesar/Documentos/node/clazapp2/node_modules/express/lib/router/layer.js:71:5) at trim_prefix (/home/cesar/Documentos/node/clazapp2/node_modules/express/lib/router/index.js:310:13) at /home/cesar/Documentos/node/clazapp2/node_modules/express/lib/router/index.js:280:7 at Function.process_params (/home/cesar/Documentos/node/clazapp2/node_modules/express/lib/router/index.js:330:12) at IncomingMessage.next (/home/cesar/Documentos/node/clazapp2/node_modules/express/lib/router/index.js:271:10) at done (/home/cesar/Documentos/node/clazapp2/node_modules/express/lib/response.js:956:25) at EventEmitter.render (/home/cesar/Documentos/node/clazapp2/node_modules/express/lib/application.js:581:14)

scheint, wie die Datei login.jade nicht gefunden hat, aber er ist bereits im Verzeichnis/Blick. So kompliziert, irgendwelche Gedanken?

+0

Was genaue URL modularisieren werden Sie Ihre login.js Route erwartet, für die Arbeit? – jfriend00

+0

@ jfriend00 Ich brauche die login.jade, genauso einfach. –

+0

Huhh. Ich habe gefragt, für welche URL Sie Ihre Login-Route erwarten. Bitte antworten Sie mit einer vollständigen URL. Ich frage, weil 'app.use ('login', login);' scheint falsch zu sein, aber ich möchte wissen, welche URL Sie erwarten, zu arbeiten, bevor Sie Ratschläge geben, was der Code für die Route sein sollte? – jfriend00

Antwort

1

Wie ich weiß express.Router() muss nur für Spezialfälle verwendet werden.
ich nächsten Weg Anwendung

// app.js 
var app = express(); 
// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
... 
require('./routes')(app); // it's call ./routes/index.js and pass app to it 

// ./routes/index.js 
var smthEntity = require('./smthEntity'); 

module.exports = function (app) { 
    app.get('/smth-path', ...smth, e.g. checkAuth, ...); 
    app.get('/smthEntity', smthEntity.get); 

    app.get('/login', require('./login').get); 
    app.post('/login', require('./login').post)); 
} 

// ./routes/smthEntity 
var SmthEntity = require ('smthEntity'); // include models 

exports.get = function(req, res, next) { 
    res.render('smthEntity.html', { 
     arg1: value1, 
     arg2: value2 
    }); 
}; 
... // other method and route for smthEntity 

// ./routes/login 
exports.get = function(req, res, next) { 
    res.render('login.html', { ... }); 
}; 

exports.post = function(req, res, next) { 
    ...process post data... 
};