【问题标题】:Error: Route.put() requires callback functions but got a [object Undefined]错误:Route.put() 需要回调函数,但得到了 [object Undefined]
【发布时间】:2021-08-04 03:09:13
【问题描述】:

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

  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 中有 "method-override": "~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());

【问题讨论】:

  • 请显示articles.hasAuthorization函数
  • 我明白了。我将 hasAuthorization 放在我的用户控制器而不是我的文章控制器中。感谢 500 万让我找到正确的位置!
  • @BenWong 您能否将其发布为答案而不是评论,然后将其标记为已接受?

标签: javascript angularjs node.js express mean-stack


【解决方案1】:

就我而言,这就是我所做的。而不是像这样导入我的控制器:

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

我用过这个:

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

解决了问题

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      万一其他人遇到这种情况:当这发生在我身上时,我的呼叫不匹配,即 PUT 正在呼叫 POST。确保一切都排好!

      【讨论】:

        猜你喜欢
        • 2021-12-31
        • 2015-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多