【问题标题】:How to create Callback for mongoose如何为猫鼬创建回调
【发布时间】:2015-06-23 14:24:34
【问题描述】:

我正在尝试为 mongoose object.save 函数创建回调,但我得到 response.sent 未定义。我对nodejs有点陌生。如果有人能指导我,我将非常感谢。

DataCallback.js

function DataCallback(req, res, next, model) {
    this.request = req;
    this.response = res;
    this.next = next;
    this.model = model;
    console.log(model+"-----------------------");
    var res = {status: 200};

    this.response.send(res);
}

DataCallback.prototype.insert = function (err, data) {

    if (err || data == undefined || data == null) {
        console.log(err);
        var res = {status: 1000, error: "unable to create " + this.model};

        this.response.send(res);
    }
    else {
        var res = {status: 200, record: data};

        this.response.send(res);
    }

    this.next();
}

module.exports = DataCallbac

Controller.js

var express=require('express');
var Router=express.Router();
var Group=require('../Model/Group');
var ObjectId=require("mongoose").ObjectId;
var dataCallbacks=require('../Utils/DataCallbacks');

Router.post("/",function(req,res,next){

    var group=new Group(req.body);



    group.save(new dataCallbacks(req,res,next,"Group").insert);

});

错误

  if (this.ended && !this.hasRejectListeners()) throw reason;
                                                      ^
TypeError: Cannot call method 'send' of undefined
    at EventEmitter.DataCallback.insert (/media/qasim/827E73097E72F4EF/node-test/primzel-api/Utils/DataCallbacks.js:23:23)
    at EventEmitter.<anonymous> (/media/qasim/827E73097E72F4EF/node-test/primzel-api/node_modules/mongoose/node_modules/mpromise/lib/promise.js:175:45)
    at EventEmitter.emit (events.js:98:17)
    at Promise.safeEmit (/media/qasim/827E73097E72F4EF/node-test/primzel-api/node_modules/mongoose/node_modules/mpromise/lib/promise.js:81:21)
    at Promise.fulfill (/media/qasim/827E73097E72F4EF/node-test/primzel-api/node_modules/mongoose/node_modules/mpromise/lib/promise.js:94:24)
    at Promise.resolve (/media/qasim/827E73097E72F4EF/node-test/primzel-api/node_modules/mongoose/lib/promise.js:113:23)
    at model.<anonymous> (/media/qasim/827E73097E72F4EF/node-test/primzel-api/node_modules/mongoose/lib/document.js:1569:39)
    at next_ (/media/qasim/827E73097E72F4EF/node-test/primzel-api/node_modules/mongoose/node_modules/hooks-fixed/hooks.js:89:34)
    at EventEmitter.fnWrapper (/media/qasim/827E73097E72F4EF/node-test/primzel-api/node_modules/mongoose/node_modules/hooks-fixed/hooks.js:171:15)
    at EventEmitter.<anonymous> (/media/qasim/827E73097E72F4EF/node-test/primzel-api/node_modules/mongoose/node_modules/mpromise/lib/promise.js:175:45)
    at EventEmitter.emit (events.js:98:17)
    at Promise.safeEmit (/media/qasim/827E73097E72F4EF/node-test/primzel-api/node_modules/mongoose/node_modules/mpromise/lib/promise.js:81:21)
    at Promise.fulfill (/media/qasim/827E73097E72F4EF/node-test/primzel-api/node_modules/mongoose/node_modules/mpromise/lib/promise.js:94:24)
    at p1.then.then.self.isNew (/media/qasim/827E73097E72F4EF/node-test/primzel-api/node_modules/mongoose/lib/model.js:254:27)
    at newTickHandler (/media/qasim/827E73097E72F4EF/node-test/primzel-api/node_modules/mongoose/node_modules/mpromise/lib/promise.js:229:18)
    at process._tickCallback (node.js:448:13)

【问题讨论】:

  • 最后一行module.exports = DataCallbac。这个错字是无意的,还是您的实际代码中的错字?
  • 另外,var dataCallbacks=require('../Utils/DataCallbacks');,模块名称为DataCallback。这是另一个错字吗?
  • 非常感谢您抽出宝贵时间,我遇到了问题,我使用插入函数作为外部调用
  • 是的,这是错字,实际上我试图从另一个函数上下文访问“this”引用,以便我得到那个异常

标签: javascript node.js mongodb express mongoose


【解决方案1】:

它对我有用:)

控制器动作的变化

group.save(new dataCallbacks(req,res,next,"Group").insert());

DataCallback.js 的变化

DataCallback.prototype.insert = function () {

    var req=this.request;
    var resp=this.response;
    var next=this.next;
    model=this.model;

    return function (err, data) {

        if (err || data == undefined || data == null) {
            console.log(err);
            var res = {status: 1000, error: "unable to create " + model};

            resp.send(res);
        }
        else {
            var res = {status: 200, record: data};

            resp.send(res);
        }

    }
}

【讨论】:

    猜你喜欢
    • 2018-05-03
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2015-03-25
    • 2020-03-23
    • 2012-04-22
    • 2015-10-14
    相关资源
    最近更新 更多