Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express Routes-多个文件的问题_Javascript_Node.js_Express_Routes - Fatal编程技术网

Javascript Express Routes-多个文件的问题

Javascript Express Routes-多个文件的问题,javascript,node.js,express,routes,Javascript,Node.js,Express,Routes,我开始学习使用Express的Node.js,但我对路由系统没有什么问题 在我的app.js(我的主文件)中,我有: var express = require('express'); var path = require('path'); var routes = require('./routes/index'); var admin = require('./routes/admin'); ... app.use('/', routes); app.use('/admin, admin);

我开始学习使用Express的Node.js,但我对路由系统没有什么问题

在我的app.js(我的主文件)中,我有:

var express = require('express');
var path = require('path');
var routes = require('./routes/index');
var admin = require('./routes/admin');
...
app.use('/', routes);
app.use('/admin, admin);
在index.js中:

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

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', {
    title: 'Express'
  });
});
根url工作得很好,它正确地返回jade模板“index”

我尝试在不同的文件中为“admin”模板(位于“./routes/admin”中)执行相同的操作。 这里有一点,当我转到localhost:5000/admin(例如),它返回404错误

这是我的admin.js文件:

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

router.get('/admin', function(req, res, next) {
  res.render('admin', {
    title: 'Connexion'
  });
});
index.js和admin.js都包含
module.exports=router

如果有人有想法或想发表评论,欢迎


非常感谢(请原谅我的英语!)

您的问题可能是您正在实例化
express
及其
路由器的多个实例,每个路由文件中都有一个实例。在
app.js
文件中需要一个
Router
,每个单独的routes文件都应该引用这个实例

作为一个想法,您可以在
app.js
中将路由器传递到每个
路由
文件:

// app.js
var admin = require('./routes/admin');
admin.init(router);
然后在您的
admin.js
文件中:

var init = function(router) {
  exports.router = router;

  exports.router.get('/admin', function(req, res, next) { 
    // ...
  });
}

您正在尝试路由此页面localhost:5000/admin/admin。app.use('/admin,admin);意味着admin.js中的所有函数都将被此请求localhost:5000/admin/…调用。。。 因此,如果您想使用localhost:5000/admin请求呈现admin.jade,您应该在 路线/索引

router.get('/admin', function(req, res, next) {
  res.render('admin', {
    title: 'Connexion'
  });
});
或在routes/admin中插入此功能:

router.get('/', function(req, res, next) {
  res.render('admin', {
    title: 'Connexion'
  });
});

它需要是:
-app.use('/admin',admin)(仅在第一部分周围加引号),而不是:
-app.use('/admin,admin)

谢谢您的回答,它很有效。但是@dc2说了一件有趣的事情:在每个文件中调用
express
Router
intance是否是一个问题?