错误:Route.put()需要回调函数,但得到了一个[object Undefined]

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

本文关键字:一个 object Undefined put Route 错误 函数 回调      更新时间:2023-09-26

我的终端控制台给了我以下信息:

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

这是我的应用程序>路由>articles.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, 

当我把这两行注释出来时,控制台中的错误就消失了。

我的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());

在我的情况下,我就是这么做的。而不是像这样导入我的控制器:

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

我用过这个:

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

它解决了

的问题

当api函数签名中的参数与编译时预期的参数不适用时,就会发生这种情况。确保您的控制器导入正确,以及在api和cntroller(复制粘贴)中以相同方式编写的contiller操作(函数)。

如果其他人遇到这种情况:当这种情况发生在我身上时,我有不匹配的调用,即PUT正在调用POST。确保所有东西都排好!