2017-02-04 6 views
1

CODE変更した後、[オブジェクト不定]を得た:Route.getは()コールバック関数を必要とするが、サーバのルートを

サーバルート

'use strict'; 

/** 
* Module dependencies 
*/ 
var articlesPolicy = require('../policies/articles.server.policy'), 
    articles = require('../controllers/articles.server.controller'); 

module.exports = function (app) { 
    // Articles collection routes 
    app.route('/api/articles').all(articlesPolicy.isAllowed) 
    .get(articles.list) 
    .post(articles.create); 

    // Own articles collection routes 
    app.route('/api/articles/myarticles').all(articlesPolicy.isAllowed) 
    .get(articles.mylist) 
    .delete(articles.delete); 

    // Single article routes 
    app.route('/api/articles/:articleId').all(articlesPolicy.isAllowed) 
    .get(articles.read) 
    .put(articles.update) 
    .delete(articles.delete); 

    // Finish by binding the article middleware 
    app.param('articleId', articles.articleByID); 
}; 

コントローラ

'use strict'; 

/** 
* Module dependencies 
*/ 
var path = require('path'), 
    mongoose = require('mongoose'), 
    Article = mongoose.model('Article'), 
    errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')); 

/** 
* Create an article 
*/ 
exports.create = function (req, res) { 
    var article = new Article(req.body); 
    article.user = req.user; 

    article.save(function (err) { 
    if (err) { 
     return res.status(422).send({ 
     message: errorHandler.getErrorMessage(err) 
     }); 
    } else { 
     res.json(article); 
    } 
    }); 
}; 

/** 
* Show the current article 
*/ 
exports.read = function (req, res) { 
    // convert mongoose document to JSON 
    var article = req.article ? req.article.toJSON() : {}; 

    // Add a custom field to the Article, for determining if the current User is the "owner". 
    // NOTE: This field is NOT persisted to the database, since it doesn't exist in the Article model. 
    article.isCurrentUserOwner = !!(req.user && article.user && article.user._id.toString() === req.user._id.toString()); 

    res.json(article); 
}; 

/** 
* Update an article 
*/ 
exports.update = function (req, res) { 
    var article = req.article; 

    article.title = req.body.title; 
    article.content = req.body.content; 

    article.save(function (err) { 
    if (err) { 
     return res.status(422).send({ 
     message: errorHandler.getErrorMessage(err) 
     }); 
    } else { 
     res.json(article); 
    } 
    }); 
}; 

/** 
* Delete an article 
*/ 
exports.delete = function (req, res) { 
    var article = req.article; 

    article.remove(function (err) { 
    if (err) { 
     return res.status(422).send({ 
     message: errorHandler.getErrorMessage(err) 
     }); 
    } else { 
     res.json(article); 
    } 
    }); 
}; 

/** 
* List of Articles 
*/ 
exports.list = function (req, res) { 
    Article.find().sort('-created').populate('user', 'displayName').exec(function (err, articles) { 
    if (err) { 
     return res.status(422).send({ 
     message: errorHandler.getErrorMessage(err) 
     }); 
    } else { 
     res.json(articles); 
    } 
    }); 
}; 

/** 
* List of own Articles 
*/ 
exports.myList = function (req, res) { 
    Article.find({ user: req.user._id.toString() }).sort('-created').populate('user', 'displayName').exec(function (err, articles) { 
    if (err) { 
     return res.status(422).send({ 
     message: errorHandler.getErrorMessage(err) 
     }); 
    } else { 
     res.json(articles); 
    } 
    }); 
}; 

/** 
* Article middleware 
*/ 
exports.articleByID = function (req, res, next, id) { 

    if (!mongoose.Types.ObjectId.isValid(id)) { 
    return res.status(400).send({ 
     message: 'Article is invalid' 
    }); 
    } 

    Article.findById(id).populate('user', 'displayName').exec(function (err, article) { 
    if (err) { 
     return next(err); 
    } else if (!article) { 
     return res.status(404).send({ 
     message: 'No article with that identifier has been found' 
     }); 
    } 
    req.article = article; 
    next(); 
    }); 
}; 

Serverポリシー

'use strict'; 

/** 
* Module dependencies 
*/ 
var acl = require('acl'); 

// Using the memory backend 
acl = new acl(new acl.memoryBackend()); 

/** 
* Invoke Articles Permissions 
*/ 
exports.invokeRolesPolicies = function() { 
    acl.allow([{ 
    roles: ['admin'], 
    allows: [{ 
     resources: '/api/articles', 
     permissions: '*' 
    }, { 
     resources: '/api/articles/:articleId', 
     permissions: '*' 
    }, { 
     resources: '/api/articles/create', 
     permissions: '*' 
    }] 
    }, { 
    roles: ['user'], 
    allows: [{ 
     resources: '/api/articles', 
     permissions: ['get'] 
    }, { 
     resources: '/api/articles/:articleId', 
     permissions: ['get'] 
    }, { 
     resources: '/api/articles/create', 
     permissions: '*' 
    }, { 
     resources: '/api/myarticles/', 
     permissions: '*' 
    }] 
    }, { 
    roles: ['guest'], 
    allows: [{ 
     resources: '/api/articles', 
     permissions: ['get'] 
    }, { 
     resources: '/api/articles/:articleId', 
     permissions: ['get'] 
    }] 
    }]); 
}; 

/** 
* Check If Articles Policy Allows 
*/ 
exports.isAllowed = function (req, res, next) { 
    var roles = (req.user) ? req.user.roles : ['guest']; 

    // If an article is being processed and the current user created it then allow any manipulation 
    if (req.article && req.user && req.article.user && req.article.user.id === req.user.id) { 
    return next(); 
    } 

    // Check for user roles 
    acl.areAnyRolesAllowed(roles, req.route.path, req.method.toLowerCase(), function (err, isAllowed) { 
    if (err) { 
     // An authorization error occurred 
     return res.status(500).send('Unexpected authorization error'); 
    } else { 
     if (isAllowed) { 
     // Access granted! Invoke next middleware 
     return next(); 
     } else { 
     return res.status(403).json({ 
      message: 'User is not authorized' 
     }); 
     } 
    } 
    }); 
}; 

SITUATION:私は私のサーバーのルートに( '/ API /記事/ myarticles')app.routeを追加

Route.getは()コールバック関数が必要ですが、ルートで、[オブジェクト未定義] を得た(匿名関数)を


[GETなど]:

すぐに、私は自分の端末で次のエラーを取得します。

QUESTION:

私が間違って何をしていると私はそれをどのように修正するのですか?私が何か間違ったことを宣言している必要があります

Express routes: .get() requires callback functions but got a [object Object]

:私は見WHAT


答えて

1

あなたは単純な誤植があります。 articles.myListの代わりにarticles.mylistがあります。

app.route('/api/articles/myarticles').all(articlesPolicy.isAllowed) 
    .get(articles.myList) // <--- it should be myList instead of mylist 
    .delete(articles.delete); 
+0

が表示されます。しかしそれでも問題は解決しない:/ myListの代わりにarticles.listが使われる。私の編集を見ていただけますか? – Coder1000

+0

あなたはまだ誤植をしておらず、 'articles.myList'を正しくタイプしていますか?スペル&ケースを確認してください。 –

+0

はい、私はArticleSeviceが問題だと思いますか?それはリストのために使用されたもので、私はmyListのためにそれを再利用しました。違いがありますか? – Coder1000

関連する問題