Feathers: рд╕реЗрд╡рд╛ рдХреЛ рд╡рд┐рдлрд▓ / рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВред рдпрджрд┐ service.get(id) рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ рддреЛ рдмрдирд╛рдПрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рдЬреВрди 2017  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: feathersjs/feathers

рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ service.create(obj) рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдорд╛рди id рд╕рд╛рде рдореМрдЬреВрджрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдереАред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкрдВрдЦреЛрдВ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗрд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдпрд╣рд╛рдВ рдкрдВрдЦ-рдиреЗрдбрдм) рдпрд╛ рдкрдВрдЦ-рд╣реБрдХ-рдЖрдоред

рдкреНрд░рдЬрдирди рдХреЗ рдЪрд░рдг

const feathers = require('feathers');
const NeDB = require('nedb');
const service = require('feathers-nedb');

const app = feathers()
app.use('/users', service({ Model: userModel(), id: 'email' }));

const users = app.service('/users');
let user = { email: '[email protected]', password: '11111', role: 'admin' }
Promise.all([
  users.create(user),
  users.create(user)
]).then(results => console.log(results))
  .catch(err => console.log('Error occurred:', err));

function userModel() {
  return new NeDB({
    filename: 'users.db',
    autoload: true
  });
}

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

рдореБрдЭреЗ рджреВрд╕рд░реЗ users.create рдХреЗ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдереАред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░

рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреЛ рдмрд╛рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реБрдХ

const { validate } = require('feathers-hooks-common')

/**
 * Checks if item with same id already exists.
 */
module.exports = function unique () {
  return validate((values, hook) => {
    return hook.service.get(values[hook.service.id])
      .catch(() => null)  // not found, pass null to next .then
      .then(res => res === null
        ? null
        : Promise.reject(new Error(`${res[hook.service.id]} already exists in db`)))
  })
}

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдкрд░ рдареЛрдХрд░ рдЦрд╛рдиреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

function userModel() {
  let Model = new NeDB({
    filename: 'users.db',
    autoload: true
  });

  Model.ensureIndex({ fieldName: 'email', unique: true }, err => {
    if (err) throw err
  });

  return Model;
}

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣реБрдХ рдкрд░ рдПрдХ рддрд░рдл рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЗ рд╣реБрдХ рдХреЗ рд╕рд╛рде рдЖрдорддреМрд░ рдкрд░ рдЫреВрдЯреА рд╣реБрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ, param рдорд╛рдиред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, get рд╕рд╛рде рдХреЛрдИ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЬрд╛рдирдХрд╛рд░реА рдкрд╛рд╕ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рджреЗрдЦреЗрдВ рдХрд┐ рд╣реБрдХ stashBefore рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред

рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдо рддреМрд░ рдкрд░ рджрдХреНрд╖рддрд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╣реБрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓рдЧрднрдЧ рдЙрддрдирд╛ рд╣реА рдХреБрд╢рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрд┐рддрдирд╛ рдХрд┐ рдПрдирдИрдбреАрдмреА рдЕрджреНрд╡рд┐рддреАрдп рдмрд╛рдзрд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: https://github.com/louischatriot/nedb/wiki/Indexing

рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдкрд░ рдареЛрдХрд░ рдЦрд╛рдиреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

function userModel() {
  let Model = new NeDB({
    filename: 'users.db',
    autoload: true
  });

  Model.ensureIndex({ fieldName: 'email', unique: true }, err => {
    if (err) throw err
  });

  return Model;
}

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрдкрдиреЗ рдЖрдк рд▓реЙрдХ рд╣реЛ рдЧрдИ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдХреГрдкрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

eric-burel picture eric-burel  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

arkenstan picture arkenstan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Vincz picture Vincz  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

RickEyre picture RickEyre  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

harrytang picture harrytang  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ