Как перевести эту дату рождения в возраст в Node js с Mongoose - PullRequest
0 голосов
/ 08 декабря 2018

Я использую Node js Express с Mongoose.В front-end есть поля bday bmonth и byear для регистрации.Однако я хочу преобразовать эти данные в возраст и сохранить их отдельно в бэк-энде в пользовательской модели как возраст.

функция

module.exports = {
  async CreateUser(req, res) {
    const schema = Joi.object().keys({
      username: Joi.string()
        .required(),
      email: Joi.string()
        .email()
        .required(),
      password: Joi.string()
        .required(),
        bday: Joi.number().integer()
        .required().min(2).max(2),
        bmonth: Joi.number().integer()
        .required().min(2).max(2),
        byear: Joi.number().integer()
        .required() 
    });

    const { error, value } = Joi.validate(req.body, schema);
    if (error && error.details) {
      return res.status(HttpStatus.BAD_REQUEST).json({ msg: error.details })
    }

    const userEmail = await User.findOne({
      email: Helpers.lowerCase(req.body.email)
    });
    if (userEmail) {
      return res
        .status(HttpStatus.CONFLICT)
        .json({ message: 'Email already exist' });
    }

    const userName = await User.findOne({
      username: Helpers.firstUpper(req.body.username)
    });
    if (userName) {
      return res
        .status(HttpStatus.CONFLICT)
        .json({ message: 'Username already exist' });
    }

    return bcrypt.hash(value.password, 10, (err, hash) => {
      if (err) {
        return res
          .status(HttpStatus.BAD_REQUEST)
          .json({ message: 'Error hashing password' });
      }
      const body = {
        username: Helpers.firstUpper(value.username),
        email: Helpers.lowerCase(value.email),
        bday: (value.bday),
         bmonth: (value.month),
       byear: (value.month),
        password: hash
      };
      User.create(body)
        .then(user => {
          const token = jwt.sign({ data: user }, dbConfig.secret, {
            expiresIn: '5h'
          });
          res.cookie('auth', token);
          res
            .status(HttpStatus.CREATED)
            .json({ message: 'User created successfully', user, token });
        })
        .catch(err => {
          res
            .status(HttpStatus.INTERNAL_SERVER_ERROR)
            .json({ message: 'Error occured' });
        });
    });
  },

Модель

username: { type: String },
  email: { type: String },
  password: { type: String },
   bday: { type: String },
  bmonth: { type: String },
  byear: { type: String },
  age: { type: String },

Я думал, что есть способ, которым можно использовать функцию в модели мгновенно и рассчитать возраст от даты рождения или преобразовать ее в вышеуказанную функцию, но не знаете, как достичь этого результата?Как узнать возраст из этих 3-х деталей (bday, bmonth, byear)?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Вы можете создать новый объект Date с предоставленными данными и рассчитать возраст:

/**
 * Date from day / month / year
 *
 * @param day    The day of the date
 * @param month  The month of the date
 * @param year   The year of the date
 */
function dateFromDayMonthYear( day, month, year ) {
    return new Date( year, month - 1, day, 0, 0, 0, 0 );
}

/**
 * Get the years from now
 *
 * @param date  The date to get the years from now
 */
function yearsFromNow( date ) {
    return (new Date() - date) / 1000 / 60 / 60 / 24 / 365;
}

/**
 * Gets the age of a person
 *
 * @param birthDate  The date when the person was born
 */
function age( birthDate ) {
    return Math.floor( yearsFromNow( birthDate ) );
}

console.log( age( dateFromDayMonthYear( 7, 12, 2008 ) ) ); // 10
console.log( age( dateFromDayMonthYear( 17, 12, 2008 ) ) ); // 9

Имейте в виду, что вы можете захотеть сделать dateFromDayMonthYear( parseInt( day ), parseInt( month ), parseInt( year ) ), так как ваши начальные значения являются строковыми.

0 голосов
/ 08 декабря 2018
const date = new Date()
console.log(date)
console.log(date.getMonth() + 1)
console.log(date.getDate())
console.log(date.getFullYear())

Output:
2018-12-08T16:46:12.274Z
12
8
2018

Таким образом, вы используете их и определяете возраст путем вычитания.

Как это работает в Node.js:

You fetch a user by ID.
  currentUser= User.findOne({userID})
you get currentUser's info like this: userDay=currentUser.bday,userMonth=currentUser.bmonth,userYear=currentUser.byear

Отдых не является специфичным для Node.js или mongooseтак много примеров доступно в сети :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...