Node + Express .post路由抛出错误。期待回调,得到了对象

时间:2013-08-30 20:26:21

标签: node.js express

我目前正在使用Express + Node开发应用。我最近使用以下语法向.post文件添加了新的app.js路由:

app.post('/api/posts/saveComment', posts.saveComment);

posts在上面定义为:

var posts = require('./routes/posts.js');

saveComment的定义如下:

exports.saveComment = function(req, res) {
    //function stuff in here, yada yada
}

现在,当我尝试运行应用程序时,节点发出错误:

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

saveComment显然是一个功能,我不明白为什么它看不到这个。我在saveComment之上定义了另一个函数,我能够完全正确地引用而没有错误,但是将函数内容复制到saveComment的函数仍会产生相同的错误。我很茫然,非常感谢任何帮助。

每个请求,posts.js

的内容
var mongo = require('../mongo.js');

exports.queryAll = function(req, res) {
    var db = mongo.db;

    db.collection('posts', function(err, collection) {
        collection.find().toArray(function(err, doc) {
            if (err)
                res.send({error:err})
            else
                res.send(doc)

            res.end();
        });
    });
}

exports.saveCommment = function(req, res) {
    var db      = mongo.db,
        BSON    = mongo.BSON,
        name    = req.body.name,
        comment = req.body.comment,
        id      = req.body.id;

    db.collection('posts', function(err, collection) {
        collection.update({_id:new BSON.ObjectID(id)}, { $push: { comments: { poster:name, comment:comment }}}, function(err, result) {
            if (err) {
                console.log("ERROR: " + err);
                res.send(err);
            }
            res.send({success:"success"});
            res.end();
        });
    });
}

3 个答案:

答案 0 :(得分:10)

嗯......令人尴尬的答案,saveCommment在我的posts.js中被定义为3米。啊。

答案 1 :(得分:0)

您是否看过其他相关问题?

如:

Understanding callbacks in Javascript and node.js

understanding the concept of javascript callbacks with node.js, especially in loops

我自己也在讨论这个话题,不得不说回调是一个快乐的node.js app的基础。

希望这会有所帮助。

答案 2 :(得分:0)

我按照以下方式编写出口。也许这会对你有所帮助:)。

  module.export = {
     savecomment : function(){
         yada yada
      },
     nextfunction : function(){
     }
   }

使用功能:

 var helper = require('helper.js')

 helper.savecomment();