Узел \ Express - "Ошибка типа: require (...) не является функцией" или приложение не определено - PullRequest
0 голосов
/ 11 марта 2019

Я получаю это сообщение об ошибке после рефакторинга моего кода в отдельные файлы js.Я пробовал множество различных методов, основанных на SO сообщениях, но, похоже, ничего не работает, я либо получаю эту ошибку, либо переменная приложения в моем контроллере равна undefined.

Я новичок в Node, поэтому, если кто-то может указатьЯ в правильном направлении, я был бы очень признателен!

Версия узла: v6.17.0

app.js

const express = require('express');
const app = express();
const controller = require('./plate-controller');

module.exports.app = app;

контроллер

const plateService = require('./plate-service');

var app = require('./app').app;
var exports = module.exports = {};

exports.controller = function(app) {
    app.get('/plates/:plate_id', function (req, res) {
        return plateService.getPlateById(req, res);
    });

    app.get('/plates/search/:plate', function (req, res) {
        return plateService.search(req, res);
    });

    app.get('/plates/current-plates', function (req, res) {
        return plateService.getCurrentPlates(req, res);
    });

    app.get('plates/prefix-plates', function (req, res) {
        return plateService.getPrefixPlates(req, res);
    });
};

Это дает неопределенное значение, а попытка вызова как require('..')() всегда приводит к ошибке is not a function.

При выводе переменной контроллера на консоль она на самом деле выглядит не так, как я думал, функция, скорее еефункция внутри объекта, поэтому я полагаю, что это является причиной require(...) is not a function.

{ controller: [Function] }

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Когда вызывается require, возвращается module.exports. export не возвращается.

вместо использования exports.controller используйте module.exports.controller так:

module.exports.controller = function(app) {
app.get('/plates/:plate_id', function (req, res) {
    return plateService.getPlateById(req, res);
});

app.get('/plates/search/:plate', function (req, res) {
    return plateService.search(req, res);
});

app.get('/plates/current-plates', function (req, res) {
    return plateService.getCurrentPlates(req, res);
});

app.get('plates/prefix-plates', function (req, res) {
    return plateService.getPrefixPlates(req, res);
});
};

Для получения дополнительной информации, вы можете посмотреть на этот ответ

0 голосов
/ 11 марта 2019

Я думаю, что я решил это сейчас, так что в случае, если это спасет кого-то еще от боли, вот как я это сделал, я следовал учебнику, чтобы продвинуться так далеко, и я не понимал, что функция будет обернута вобъект, когда он был возвращен.

Если есть лучший способ сделать это, пожалуйста, дайте мне знать.

const controllerExports = require('./plate-controller');
controllerExports.controller(app);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...