SUW15 – v42 – En enkel Chat klass om lagrar data i DB

Nedan hittar du all kod som vi skrivit under dagens lektion. Vi har skapat en DB klass som använder mongoose för att koppla upp sig till MongoDB, samt en Chat klass som, med hjälp av DB klassen, lagrar meddelanden i databas.

DB.class.js

En generisk databasklass som kopplar upp sig till databas, laddar alla mongoose modeller inuti /models/ mappen, samt erbjuder en metod för att hämta en specifik modell.


// our database connection var connection; module.exports = class DB { constructor() { // do not connect to mongodb multiple times! if (connection) { return; } // save our settings to this this.settings = g.settings.DB; // connect to db this.connect(); // load all model files this.loadModels(); } connect() { // connect m.mongoose.connect('mongodb://'+this.settings.host+'/'+this.settings.db); // store connection connection = m.mongoose.connection; // log successful connection connection.once('open', () => { console.log("Mongoose connected to "+this.settings.db); }); } // gets a loaded model by name getModel(name) { return m.mongoose.model(name); } loadModels() { // find all files in the model directory, var modelFiles = m.fs.readdirSync(this.settings.modelDir); // console.log("mf", modelFiles); // and require each of them modelFiles.forEach(function(fileName) { require(m.path.join(this.settings.modelDir, fileName)); }, this); // check if the model loaded // console.log(m.mongoose.model('Message')); } };

Chat.class.js

En enkel chat som låter en eller flera användare skapa och hämta meddelanden. Erbjuder även förmågan att bara hämta meddelanden från en viss användare. Du måste använda Postman eller skicka AJAX anrop från frontend för att använda chatten. Instantieras inuti Server.class.js precis innan alla andra routes skapas.

'use strict';

module.exports = class Chat {

  constructor(expressApp) {
    // save our settings to this
    this.settings = g.settings.Chat;

    // the express server instance
    this.app = expressApp;

    // database connection
    this.db = new g.classes.DB();

    // get the Message model
    this.model = this.db.getModel(this.settings.msgModel);

    // console.log("Chat intantiated, expressApp", expressApp);

    // setup express routes
    this.setup();
  }

  setup() {
    // route for getting all messages
    this.app.get(this.settings.endpoint, (req, res) => {
      // get messages from DB
      var searchParams = {};

      // allow filtering by user
      if (req.params.user) {
        searchParams.user = req.params.user;
      }

      // Message.find(searchParams, () => {})
      this.model.find(searchParams, function(err, docs) {
        // do we have an error?
        if (err) { throw err; }
        // else send result
        res.json(docs);
      });
    });


    // route for creating a message
    this.app.post(this.settings.endpoint, (req, res) => {
      // do we have a user?
      if (!req.params.user) {
        // send status "Not found" and terminate
        res.sendStatus(404);
        return;
      }

      // create a new message document
      // new Message({}).save();
      var msg = new this.model({
        user: req.params.user,
        msg: req.body.msg
      });

      // save to collection
      msg.save(function(err) {
        if (err) { throw err; }
        // send the message as a response,
        // once saved!
        res.json(msg);
      });
    });
  }

};
0 votes