2016-02-10 63 views
1

我正在建立我的第一個服務。這段代碼有什麼問題,因爲我可以看到用戶已經插入數據庫,但是我的代碼沒有到達res.jsonSailsJS服務電話

我的服務

create: function(data) { 
    return User.create(data); 
} 

我控制器

UserService.create(req.params.all()) 
    .then(function(err, user) { 
    if (err) return err; 
    res.json(user); 
    }); 

更新代碼:

我的服務

create: function(data) { 
    return User.create(data); 
}, 

我控制器

UserService.create(req.params.all()) 
    .then(function(user) { 
    res.json(user); 
    }) 
    .catch(function(err) { 
    return res.negotiate(err); 
    }); 

這給了我以下錯誤:

error: Sending 500 ("Server Error") response: TypeError: this.toObject is not a function at [object Object].module.exports.attributes.toJSON (.../api/models/User.js:47:23) ... 

顯然,我混合的東西了。我不知道何時使用諾言,什麼時候回調,什麼時候回來。有人可以向我解釋嗎?


更新代碼:

這是塊被觸發錯誤時。如果我刪除此塊,代碼正在工作。

// Removing password from output 
toJSON:() => { 
    var data = this.toObject(); 
    delete data.password; 

    return data; 
}, 
+0

你使用水線嗎? – Festo

+0

是的,水線。 –

+0

Weellll不讓我們處於懸念之中,api/models/User.js第47行是什麼?事實上,也許只是發佈包含第47行的整個方法。 – sgress454

回答

0

看起來像是混合了promise和callback語法。當使用.then(),你只需要使用的第一個參數:

UserService.create(req.params.all()) 
    .then(function(user) { 
    res.json(user); 
    }); 

因爲發現錯誤,你可以使用.catch()

UserService.create(req.params.all()) 
    .then(function(user) { 
    res.json(user); 
    }) 
    .catch(function(err) { 
    return res.negotiate(err); 
    }); 

如果你想使用這兩個參數的回調風格,使用.exec()相反:

UserService.create(req.params.all()) 
    .exec(function(err, user) { 
    if (err) {return res.negotiate(err);} 
    res.json(user); 
    }); 

無論哪種方式,你不應該從控制器動作return;它總是應該終止於某種迴應(對於錯誤,使用res.negotiateres.serverErrorres.badRequest等)。

+0

我會檢查一下,謝謝你。 –

+0

你能檢查更新的代碼嗎?謝謝。 –

0

我認爲「this」已經是一個對象,所以不需要toObject()。這對我來說是有效的:

toJSON:() => { 
    delete this.password; 
    return this; 
},