错误:Route.put()需要回调函数但得到[对象未定义]

时间:2015-11-17 19:23:17

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

我的终端控制台给了我以下内容:

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

我用过这个:

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

解决了问题

答案 2 :(得分:-1)

如果其他人遇到这种情况:当我遇到这种情况时,我的电话不匹配,即PUT正在呼叫POST。确保一切都排好!