在控制器函数中进行快速路由访问时,App.route不是函数

时间:2019-01-25 09:10:31

标签: node.js express

我正在尝试使用NodeJS创建一个简单的API。

我计划将主要的api.jsroute-definitions.jsroute-logic.js放在各自的文件夹中,以使它们更加结构化和组织化。

但是,当我在app.route()中调用route-definitions.js时,它在编译时失败,并说app.route不是函数。

server.js

  var express = require('express')
  var api = require("./api/api.js");

  app = express();
  port = process.env.PORT || 3000;
  app.use('/', api);

  app.listen(port);

api.js

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

router.use('/read', require('./routes/route-definitions'));

module.exports = router;

route-definitions.js

'use strict';
module.exports = function(app) {

  var operations = require('../controllers/route-logic.js')

  //Route to check if a file with the same file name already exists
  app.route('/getItems')
    .post(operations.getItems);
}

当我尝试在本地运行API并调用/ read / getItems时,出现错误消息:

  

TypeError:app.route不是函数

我想念什么?我对Node and Express还是很陌生,但是我知道我没有正确传递应用程序实例,或者未全局设置它。

3 个答案:

答案 0 :(得分:0)

在api.js中,您需要将路由器传递到要在route-definitions.js中导出的​​功能

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

router.use('/read', require('./routes/route-definitions')(router));

module.exports = router;

答案 1 :(得分:0)

您可以通过在 route-definitions.js

中创建子路由器来解决此问题
var router = require('express').Router();
var operations = require('../controllers/route-logic.js');

router.post('/getItems', operations.getItems);

module.exports = router;

答案 2 :(得分:0)

您在app中使用过route-definitions.js,但似乎忘记了将其传递给该模块。

请查看以下代码:

var express = require('express');
var router = express.Router();
var app = express();
router.use('/read', require('./routes/route-definitions')(app));
module.exports = router;