4

我目前正在使用 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,我可以完全正确地引用它而不会出错,但是将该函数内容复制到 ofsaveComment仍然会产生相同的错误。我很茫然,非常感谢任何帮助。

根据要求,内容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();
        });
    });
}
4

3 回答 3

10

Well...embarrassing answer, saveCommment is defined with 3 m's in my posts.js. Ugh.

于 2013-08-30T20:39:53.980 回答
0

你看过其他相关的问题吗?

如:

了解 Javascript 和 node.js 中的回调

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

I've battled with this topic myself and have to say that callbacks are fundamental for a happy node.js app.

Hope this helps.

于 2013-08-30T20:30:26.310 回答
0

I write my exports the following way. maybe this will help you :)

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

Using the functions:

 var helper = require('helper.js')

 helper.savecomment();
于 2013-08-30T20:36:36.337 回答