App.route не является функцией при доступе к ней в функции контроллера для экспресс-маршрутизации - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь создать простой API с помощью NodeJS.

Я планирую разделить основные api.js, route-definitions.js, route-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;

маршрутный 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 локально и вызывать / читать / getItems, я получаю сообщение об ошибке:

TypeError: app.route не является функцией

Что мне не хватает? Я довольно новичок в Node и Express, но я знаю, что неправильно передаю экземпляр приложения или он не задан глобально.

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Вы можете решить эту проблему, создав дочерний маршрутизатор в route-definitions.js

var router = require('express').Router();
var operations = require('../controllers/route-logic.js');

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

module.exports = router;
0 голосов
/ 25 января 2019

Вы использовали 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;
0 голосов
/ 25 января 2019

В api.js вам нужно передать роутер в функцию, которую вы экспортируете в route-definitions.js

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

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

module.exports = router;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...