node.js – Express:单独的路由和控制器文件

我试图在Express中将一些路由及其处理程序逻辑拆分为单独的文件.我已经看到了类似于JS的示例目录结构,其中使用了单独的路由和控制器文件,因此我试图实现这种方法但是遇到了问题.

我的服务器和路由配置如下:

server.js

var express = require('express'),app = express(),bodyParser = require('body-parser'),routes = require('./routes/index')

app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
routes(app);

/routes/index.js

module.exports = function(app) {
  var catalogues = require('../routes/catalogues');
  app.use('/catalogues-api',catalogues);
};

/routes/catalogues.js

var catalogues = require('../controllers/catalogues');
module.exports = function(app) {

  app.route('/catalogues')
    .get(catalogues.apiGET)
    .post(catalogues.apiPOST);
};

/controllers/catalogues.js

var request = require('request');

exports.apiGET = function(req,res) {
  var options = prepareCataloguesAPIHeaders(req);
  request(options,function(err,response,body){
    res.send(body);
  });
};

exports.apiPOST = function(req,res) {
  var options = prepareCataloguesAPIHeaders(req);
  options.json = true;
  options.body = stripBody(req.body);
  request(options,body){
    res.send(body);
  });
};

运行应用程序并对/ catalogs-api / catalogs发出GET请求时,我从节点抛出一个错误

TypeError: undefined is not a function
at module.exports (C:\Users\rparker\Documents\GitHub\testproj\src\server\routes\catalogues.js:4:7)

这是在我的/routes/catalogues.js文件中引用app.route声明.我在设置中显然遗漏了一些东西,但我无法理解.

有人可以帮忙吗?
谢谢

解决方法

在/routes/catalogues.js
var express = require('express');
var router = express.Router();
var catalogues = require('../controllers/catalogues');

router.route('/catalogues')
.get(catalogues.apiGET)
.post(catalogues.apiPOST);
module.exports = router;

查看this documentation的最后一部分

相关文章

现在的js代码都是这种高级点的方式语法 , 就是ts语法 ,要使用ts语法那就要先安装一下 先安装nodejs最...
nvm是node版本管理工具 为了解决node各种版本存在不兼容现象 nvm是让你在同一台机器上安装和切换不同版...
1、安装nodejs 2、在项目文件夹目录下创建一个js文件,命名server.js(自定义名称),内容如下 3、打开命令...
1.连接路径:path.join([path1][, path2][, ...]) path.join()方法可以连接任意多个路径字符串。要连接...
简介 1.aes加密简单来说,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个...
定义 Object.keys 定义:返回一个对象可枚举属性的字符串数组; Object.getOwnPropertyNames 定义:返回...