[英]node.js callbacks, nested functions, how to refactor
我是Node.js和Express的新手。 我想創建一個Vendor並將其與City對象關聯。
//城市模型var mongoose = require('mongoose');
var CitySchema = new mongoose.Schema({
name: String
});
//供應商模型
var mongoose = require('mongoose');
var VendorSchema = new mongoose.Schema({
name: String,
city: { type: mongoose.Schema.Types.ObjectId, ref: 'City' }
});
mongoose.model('Vendor', VendorSchema);
//routes/index.js
vendor.save(function)在City.findOne(function)內部,看上去有點難看。 我希望代碼遵循單一職責規則,或者說使代碼更簡潔。 編寫這些嵌套的回調函數的最佳實踐是什么?
非常感謝你。
mongoose.model('City', CitySchema);
router.post('/vendor', function(req, res, next){
var vendor = new Vendor();
vendor.name = req.body.name;
City.findOne({name:req.body.city}, function(err, city) {
if (err) return next(err);
vendor.city = city;
vendor.save(function(err, vendor) {
if (err) { return next(err); }
res.json(vendor);
});
});
});
您可以嘗試使用Model.populate() :
var Vendor = mongoose.model('Vendor', VendorSchema);
var opts = [{ path: 'city', match: { name: req.body.city}}];
var vendor = new Vendor({
name: req.body.name
});
Vendor.populate(vendor, opts, function (err, vendor) {
if (err) { return next(err); }
res.json(vendor);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.