Γρήγορη αναφορά

Modella Models Σημειώσεις

Γρήγορος οδηγός αναφοράς για το Modella: μινιμαλιστικό πλαίσιο μοντέλων JavaScript, ορισμοί γνωρισμάτων, επικυρώσεις και πρόσθετα.

· Δημοσιεύτηκε

[!NOTE] Αρχειοθετημένο Έργο: Το Modella είναι ένα ιστορικό πλαίσιο μοντέλων για Node.js και εφαρμογές περιηγητή. Για σύγχρονα έργα, προτείνονται τα Zod ή Prisma.

Το Modella είναι μια απλή βιβλιοθήκη μοντελοποίησης δεδομένων σχεδιασμένη να επεκτείνεται μέσω plugins.

Ορισμός Μοντέλου

const Modella = require('modella');
const validators = require('modella-validators');

const User = Modella('User')
  .attr('id')
  .attr('name')
  .attr('email', { required: true })
  .use(validators);

// Προσαρμοσμένος κανόνας επικύρωσης
User.validate((user) => {
  if (!user.name()) {
    user.error('name', 'Name is required');
  }
});

Στιγμιότυπα & Ιδιότητες Μοντέλου

// Αρχικοποίηση
const user = new User({ name: 'Alice', email: '[email protected]' });

// Getters και Setters
user.name();               // -> "Alice"
user.name('Bob');          // Sets name to "Bob"
user.set({ name: 'Charlie' });

// Κατηγορήματα κατάστασης
user.has('name');          // -> true
user.isNew();              // -> true (not yet saved)
user.isValid();            // Runs sync validators -> true/false

Συμβάντα Κύκλου Ζωής

// Συμβάντα εμμονής
user.on('save', () => console.log('Saved'));
user.on('create', () => console.log('Created'));
user.on('remove', () => console.log('Removed'));

// Ασύγχρονα hooks
user.on('saving', (instance, done) => {
  done();
});

// Συμβάντα αλλαγής γνωρισμάτων
user.on('change', () => console.log('Attributes modified'));
user.on('change email', () => console.log('Email changed'));

Αρχιτεκτονική Πρόσθετων (Plugins)

Ένα plugin του Modella είναι μια συνάρτηση ανώτερης τάξης που διακοσμεί το μοντέλο:

const TimestampsPlugin = () => {
  return (Model) => {
    Model
      .attr('createdAt')
      .attr('updatedAt');

    Model.on('saving', (record, done) => {
      const now = new Date();
      if (record.isNew()) record.createdAt(now);
      record.updatedAt(now);
      done();
    });

    return Model;
  };
};

User.use(TimestampsPlugin());

Αναφορές

Σχετικά θέματα