Задать вопрос
@evg_96

Как обработать обновление данных пользователя в БД?

Только начал разбираться с mongo/mongoose.
На данный момент смог сделать получение всех пользователей, получение пользователя по id и добавление пользователя в БД.

Не могу разобраться как обновить/модифицировать пользователя при запросе PATCH (/users/:id)
Подскажите пожалуйста. Пытался сделать, смотрел в документации методы, но что то не получалось.
И еще вопрос. Как научиться правильно обрабатывать ошибки в node.js. Очень запутано как то все с обработкой ошибок.

const Koa = require("koa");
const mongoose = require("mongoose");
const bodyParser = require("koa-bodyparser");

const app = new Koa();
const Router = require("koa-router");
const router = new Router();

app.use(bodyParser());

mongoose.Promise = Promise;

mongoose.connect("mongodb://localhost/test", { useMongoClient: true });

const userSchema = new mongoose.Schema({
  email: {
    type: String,
    required: true,
    default: "mail@gmail.com"
  },
  cdate: Date,
  mdate: Date,
  displayName: {
    type: String,
    required: true,
    default: "Anonimous"
  }
});

const User = mongoose.model("User", userSchema);

const user = new User({
  email: "user@gmail.com",
  cdate: Date.now(),
  mdate: Date.now(),
  displayName: "user"
});

router.get("/users", async (ctx, next) => {
  const users = await User.find({});

  ctx.body = users.map(user => ({
    name: user.displayName,
    email: user.email
  }));
});

router.get("/users/:id", async (ctx, next) => {
  if (!mongoose.Types.ObjectId.isValid(ctx.params.id)) {
    ctx.throw(404, "invalid Report id");
  }

  const user = await User.findById(ctx.params.id);

  if (!user) {
    ctx.throw(404, "User not found");
  }

  ctx.body = {
    user: user.displayName,
    email: user.email
  };
});

router.post("/users", async (ctx, next) => {
  try {
    const user = User.create({
      email: ctx.request.body.email,
      displayName: ctx.request.body.displayName,
      cdate: Date.now(),
      mdate: Date.now()
    });
  } catch (err) {
    ctx.throw(400, "Error...");
  }
});

app.use(router.routes());

app.listen(3000);
  • Вопрос задан
  • 246 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы