Ошибка: Route.put () требует функций обратного вызова, но получил [объект не определен]

Моя терминальная консоль дает мне следующее:

  Error: Route.put() requires callback functions but got a [object Undefined]

Это мое приложение> маршруты> article.server.routes.js

var users = require('../../app/controllers/users.server.controller'),
        articles = require('../../app/controllers/articles.server.controller');

module.exports = function(app) {
    app.route('/api/articles')
        .get(articles.list)
        .post(users.requiresLogin, articles.create);

    app.route('/api/articles/:articleId')
        .get(articles.read)
        // .put(users.requiresLogin, articles.hasAuthorization, articles.update)
        // .delete(users.requiresLogin, articles.hasAuthorization, articles.delete);
        app.param('articleId', articles.articleByID);


};

Я получаю следующее сообщение об ошибке:

// .put(users.requiresLogin, articles.hasAuthorization, articles.update)
// .delete(users.requiresLogin, articles.hasAuthorization, 

Когда я закомментирую эти 2 строки, ошибки в консоли исчезнут.

У меня в package.json есть "метод переопределения": "~ 2.2.0", и он правильно установлен. И я правильно заявил об этом в моем express.js файле, поэтому я не уверен, что я сделал не так.

var config = require('./config'),
    express = require('express'),
    morgan = require('morgan'), 
    compress = require('compression'),
    bodyParser = require('body-parser'),
    methodOverride = require('method-override'),****
    session = require('express-session'),
    flash = require('connect-flash'),
    passport = require('passport');

module.exports = function(){
    var app = express();

    if (process.env.NODE_ENV === 'development'){
        app.use(morgan('dev'));
    } else if (process.env.NODE_ENV === 'production'){
        app.use(compress());
    }

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

    app.use(bodyParser.json());

    app.use(methodOverride());

person Ben Wong    schedule 17.11.2015    source источник
comment
покажите, пожалуйста, articles.hasAuthorization функцию   -  person Tomasz Jakub Rup    schedule 17.11.2015
comment
Я понял. Я поместил hasAuthorization в свой пользовательский контроллер, а не в свой контроллер статей. Спасибо 5 миллионов за то, что заставили меня посмотреть в нужном месте!   -  person Ben Wong    schedule 17.11.2015
comment
@BenWong Можете ли вы опубликовать это как ответ, а не как комментарий, а затем отметить, что он принят?   -  person Ouroborus    schedule 21.11.2016


Ответы (3)


Это происходит, когда параметры в сигнатуре функции api не применимы с параметрами, которые она ожидала во время компиляции. Убедитесь, что ваш контроллер импортирован правильно, а также действие вашего контроллера (функция), написанное одинаково в api и cntroller (копирование и вставка).

person shdr    schedule 28.06.2020

В моем случае это то, что я сделал. Вместо того, чтобы импортировать мой контроллер следующим образом:

const forgotPassword  = require('../controllers/forgotPasswordController');

Я использовал это:

const { forgotPassword } = require('../controllers/forgotPasswordController');

Это решило проблему

person Abayomi Ogunnusi    schedule 03.08.2021

В случае, если другие сталкиваются с этим: когда это случилось со мной, у меня были несовпадающие вызовы, то есть PUT вызывал POST. Убедитесь, что все выровнено!

person metalkat    schedule 03.11.2016