2016-12-29 2 views
0

Im new to nodejs, и у меня есть этот уродливый фрагмент кода, который, как мне кажется, должен быть в его собственной функции, но я не знаю, как создать функцию. В моем методе post у меня есть этот длинный фрагмент кода, запрашивающий данные из тела и сохраняющий его в моем mongodb.Чистый способ вставки данных в mongodb через функцию в nodejs?

router.post("/club-affiliation-registration", function (req, res) { 
var club = { 
    clubName: req.body.clubName, 
    clubAddress: req.body.clubAddress, 
    clubDisciplines: req.body.clubDisciplines, 
    clubEmail: req.body.clubEmail, 
    clubWebsite: req.body.clubWebsite, 
} 

var clubChairperson = { 
    firstName: req.body.chairpersonFirstName, 
    secondName: req.body.chairpersonLastName, 
    phone: req.body.chairpersonPhone, 
    email: req.body.chairpersonEmail 
} 

var clubSecretary = { 
    firstName: req.body.secretaryFirstName, 
    secondName: req.body.secretaryLastName, 
    phone: req.body.secretaryPhone, 
    email: req.body.secretaryEmail 
} 

var clubTreasurer = { 
    firstName: req.body.treasurerFirstName, 
    secondName: req.body.treasurerLastName, 
    phone: req.body.treasurerPhone, 
    email: req.body.treasurerEmail 
} 
var clubChildProtectionOfficer = { 
    fullName: req.body.childProtectionOfficerName, 
    phone: req.body.childProtectionOfficerMobile, 
    email: req.body.childProtectionOfficerEmail 
} 
var meta = { 
    clubPaymentId: result.transaction.id 
} 
// storing in database 
var newClub = { 
       club: club, 
       clubChairperson: clubChairperson, 
       clubSecretary: clubSecretary, 
       clubTreasurer: clubTreasurer, 
       clubChildProtectionOfficer: clubChildProtectionOfficer, 
       meta: meta 
      } 
Club.create(newClub, function (error, newlyCreatedClub) { 
       if (error) { 
        console.log(error); 
       } else { 
        req.flash("success", "You Application has been submitted. Please save your payment number: " + result.transaction.id); 
        res.redirect("/about"); 
       } 
      }); 
}); 

Можно ли поместить эти данные, запрашивая их в свою функцию, и просто вызвать их из почтового метода? Как это будет достигнуто?

Мой клуб схема

var ClubSchema = new mongoose.Schema({ 
// first page 
club: { 
    clubName: String, 
    clubAddress: String, 
    clubDisciplines: String, 
    clubEmail: String, 
    clubWebsite: String, 
    clubSponsor: String 
}, 
// second page 
clubChairperson: { 
    firstName: String, 
    secondName: String, 
    phone: String, 
    email: String 
}, 
clubSecretary: { 
    firstName: String, 
    secondName: String, 
    phone: String, 
    email: String 
}, 
clubTreasurer: { 
    firstName: String, 
    secondName: String, 
    phone: String, 
    email: String 
}, 
clubChildProtectionOfficer: { 
    fullName: String, 
    phone: String, 
    email: String 
}, 
meta:{ 
    clubSubmission : { type : Date, default: Date.now }, 
    clubPaymentId: String 
} 

}); 
+0

Можете ли вы показать нам свой 'Club' определение модели схемы? Вы можете сделать с редизайном модели, возможно, создать отдельную коллекцию пользователей, которая содержит соответствующую информацию, такую ​​как «firstName», «secondName», «phone» и «email», поскольку текущая схема нарушает принцип DRY ('D'on't 'R'epeat' Y'self). – chridam

+0

@chridam Я только что добавил. Я попытался поместить все функции req.body в функцию и вернуть newClub, но я получаю сообщение об ошибке «Не могу прочитать свойство« тело »неопределенного слова – Recap

+0

@chridam. Спасибо за это. Я применил его к моей схеме, но это не было связано с вопросом. – Recap

ответ

2

на основе архитектуры MVC, контроллеры являются resposible для связи между данными и вашими запросами клиента. поэтому вы можете определить все ваши функции обратного вызова на ваши http-глаголы, включая get, post, delete, ... в контроллере.

маршруты/router.js

var controller = require('../controllers/controller.js'); 

router 
    .route("/club-affiliation-registration") 
     .get(controller.getRegistration) 
     .post(controller.postRegistration); 

Контроллеры/controller.js

var Club = require('../models/club.js'); 

module.exports = { 

    getRegistration: function(req, res) {}, 

    postRegistration: function(req, res) { 
     var club = { 
      clubName: req.body.clubName, 
      clubAddress: req.body.clubAddress, 
      clubDisciplines: req.body.clubDisciplines, 
      clubEmail: req.body.clubEmail, 
      clubWebsite: req.body.clubWebsite, 
     }; 

     var clubChairperson = { 
      firstName: req.body.chairpersonFirstName, 
      secondName: req.body.chairpersonLastName, 
      phone: req.body.chairpersonPhone, 
      email: req.body.chairpersonEmail 
     }; 

     var clubSecretary = { 
      firstName: req.body.secretaryFirstName, 
      secondName: req.body.secretaryLastName, 
      phone: req.body.secretaryPhone, 
      email: req.body.secretaryEmail 
     }; 

     var clubTreasurer = { 
      firstName: req.body.treasurerFirstName, 
      secondName: req.body.treasurerLastName, 
      phone: req.body.treasurerPhone, 
      email: req.body.treasurerEmail 
     }; 

     var clubChildProtectionOfficer = { 
      fullName: req.body.childProtectionOfficerName, 
      phone: req.body.childProtectionOfficerMobile, 
      email: req.body.childProtectionOfficerEmail 
     }; 

     var meta = { 
      clubPaymentId: result.transaction.id 
     }; 

     // storing in database 
     var newClub = { 
      club: club, 
      clubChairperson: clubChairperson, 
      clubSecretary: clubSecretary, 
      clubTreasurer: clubTreasurer, 
      clubChildProtectionOfficer: clubChildProtectionOfficer, 
      meta: meta 
     }; 

     Club.create(newClub, function(error, newlyCreatedClub) { 
      if (error) { 
       console.log(error); 
      } else { 
       req.flash("success", "You Application has been submitted. Please save your payment number: " + result.transaction.id); 
       res.redirect("/about"); 
      } 
     }); 
    } 
}; 
+0

Это то, что я искал. Это сделало вещи намного чище. Мне придется больше смотреть на контроллеры, чтобы я мог лучше понять это. – Recap

Смежные вопросы