我正在尝试模块化我的应用程序来分隔路由,但唯一有效的是根路由,在阅读 Express Routing 后,我不知道我的代码有什么问题。 ,我的代码似乎写得正确
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;
login.js
var express = require('express');
var router = express.Router();
//login page
router.get("/login", function(req, res, next) {
res.render('login');
});
module.exports = router;
如您所见,login.js 和index.js 的代码非常相同,但是/login 路由不起作用。出现消息:
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)
似乎没有找到文件login.jade,但他已经位于目录/views中。这么复杂,有什么想法吗?
最佳答案
据我所知 express.Router()
必须仅用于特殊情况。
我使用下一种方法来模块化应用程序
// 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...
};
关于node.js - 为什么使用不同文件的 Express 路由不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38690540/