【问题标题】:Nodejs Express: Routes in separate filesNodejs Express:单独文件中的路由
【发布时间】:2017-01-28 10:25:56
【问题描述】:

我编写了我的 app.js,包括主文件中的所有路由,一切运行良好。在我的目标是通过将路线移动到不同的文件中来使项目更加清晰之后,但它不起作用。 我正在传递一个对象而不是一个中间件函数,但我不知道如何以正确的方式修复它。

这是我的 app.js 文件:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var morgan = require('morgan');
var mongoose = require('mongoose');
var myRoutes = require('./app/routes/myRoutes.js');

...

//parser for getting info from POST and/or URL parameters
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

//for log requests to console
app.use(morgan('dev'));

app.use('/myRoutes', myRoutes);

app.get('/',function(req,res){
    res.end('Welcome Page!');
});

//Server Start
app.listen(port);
console.log('server start at port ' + port);

而 app/routes/myRoutes.js 包含以下代码:

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

myRoutes.get('/users',function(req,res){
...
});

myRoutes.post('/setup',function(req,res){
    ...
});

myRoutes.post('/remove', function(req,res){
    ...
});

module.export = myRoutes;

我也试过这个:

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

myRoutes.route('/')
    .get(function(req, res, next){
        res.end('myRoute Get');
    })
    .post(function(req, res, next){
        res.end('myRoute Post');
    });

module.export = myRoutes;

但它似乎没有传递中间件函数。

【问题讨论】:

  • 尝试var myRoutes = require('./app/routes/myRoutes');并检查myRoutes是否为空
  • 文件已正确加载。问题与传递中间件函数而不是对象有关。
  • 错误是什么?

标签: node.js express


【解决方案1】:

我的第二个选项代码

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

myRoutes.route('/')
    .get(function(req, res, next){
        res.end('myRoute Get');
    })
    .post(function(req, res, next){
        res.end('myRoute Post');
    });

module.export = myRoutes;

工作正常!我只是写错了

module.export = myRoutes;

不是

module.exports = myRoutes;

【讨论】:

    【解决方案2】:

    您好,这是关于该问题的更多提示。你的主 js 文件肯定需要加载很多路由,我发现导入所有路由是很多工作。而是使用require-dir 模块来加载所有路由,如

    const loader = require('require-dir');
    var app = express();
    var routes = loader('./routes');
    for (route in routes){
      app.use("/"+route,routes[route]);
    }
    

    不用说定义routes文件夹内的所有路由,并在每个路由中导出Router模块,就像

    var router = express.Router();
    
    router.get(....);
    
    module.exports = router; 
    

    【讨论】:

      猜你喜欢
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      相关资源
      最近更新 更多