Feathers: service.get(id)κ°€ 이미 μžˆλŠ” 경우 service.create μ‹€νŒ¨/ν—ˆμš©

에 λ§Œλ“  2017λ…„ 06μ›” 23일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: feathersjs/feathers

λ°μ΄ν„°λ² μ΄μŠ€μ— λ™μΌν•œ id μžˆλŠ” κΈ°μ‘΄ ν•­λͺ©μ΄ 이미 μ‘΄μž¬ν•˜λŠ” 경우 service.create(obj) κ°€ μ‹€νŒ¨ν•  κ²ƒμœΌλ‘œ μ˜ˆμƒν–ˆμŠ΅λ‹ˆλ‹€. 이것이 feathers λ²”μœ„μ— μžˆλŠ”μ§€, νŠΉμ • λ°μ΄ν„°λ² μ΄μŠ€ μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€(μ—¬κΈ°μ„œλŠ” feathers-nedb) λ˜λŠ” feathers-hooks-common인지 ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μž¬ν˜„ 단계

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 후크가 이λ₯Ό μ²˜λ¦¬ν•˜λŠ” 방법을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

이것은 νš¨μœ¨μ„±μ„ μœ„ν•΄ 일반적으둜 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€. ν›„ν¬λ‘œ κ΅¬ν˜„ν•˜λŠ” 것은 ν™•μ‹€νžˆ κ°€λŠ₯ν•˜μ§€λ§Œ NeDB 고유 μ œμ•½ 쑰건 인덱슀λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒλ§ŒνΌ νš¨μœ¨μ μ΄μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. 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 λ“±κΈ‰