Ошибка чтения свойства «создать» из неопределенного »в Sequelize node js - PullRequest
0 голосов
/ 20 апреля 2020

Я работаю с узлом, sequelize, миграцией и postgre. Я уже определил свои модели в файле папки 'models', но каждый раз, когда я пытаюсь запустить свою конечную точку, я получаю сообщение об ошибке "Не удается прочитать свойство 'create' of undefined"

структура моего приложения:

-bin
  www
-config
   config.js
-models
   training.js
-public
-routes
-views

ниже мой код: моя модель (обучение. js)

'use strict'

module.exports = (Sequelize, DataTypes) => {

    const Training = Sequelize.define('Training', {


        id: {
            autoIncrement: true,
            primaryKey: true,
            type: DataTypes.INTEGER
        },

        firstname: {
            type:  DataTypes.STRING,
            notEmpty: true
        },

        lastname: {
            type:  DataTypes.STRING,
            notEmpty: true
        },

        email: {
            type:  DataTypes.STRING,
            validate: {
                isEmail: true}
            },

         gender: {
                type:  DataTypes.STRING,

                },
        course: {
            type: DataTypes.STRING,
        },

        address: {
            type:  DataTypes.STRING,

        },

        registered: {
            type:  DataTypes.DATE
        },
        number : {
            type: DataTypes.STRING,
            allowNull: false
        }


    }, {});
    return Training;

}



и мой файл маршрутов:

var express = require('express');
var router = express.Router();
const bodyParser = require('body-parser');
const { check, validationResult } = require('express-validator');
const  Sequelize  = require('sequelize');
const db = require('.././config/config');
const Training = require('.././models').Training;



/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('training', { title: 'Register' });
});

router.post('/',[
  check('name').isLength({ min: 1 }).withMessage('First is required').trim().escape(),

  check('lastname').isLength({ min: 1 }).withMessage('Lastname is required').trim().escape(),

  check('email').isEmail().withMessage('That email doesn‘t look right').bail().trim().normalizeEmail(),

  check('number').isInt().withMessage('Number is Invalid'),

  check('address').isLength({ min: 1 }).withMessage('adddress is required').trim().escape()


], function(req, res, next) {

  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(422).jsonp(errors.array());
  } else {

    let details = { 
      name : req.body.name,  
        lastname : req.body.lastname,  
        email : req.body.email, 
        number :req.body.number,
        gender :req.body.gender,
        course :req.body.course,
         address : req.body.address

       }


    db.Training.create({

         firstname : name,
              lastname : lastname,
               email : email,
                gender :gender,
                course : course,
                 address : address
    })
    .then(console.log('saved succesfully'))
  .catch(err => console.error(err.message))



  }

});





module.exports = router;

1 Ответ

0 голосов
/ 25 апреля 2020

Вам не нужен конфиг для доступа к моделям. Импорт const db = require('.././config/config'); не требуется.

Поскольку вы импортировали Training с этой строкой const Training = require('.././models').Training;, вы можете просто go опередить и использовать модель, как показано ниже:

Training.create({

     firstname : name,
     lastname : lastname,
     email : email,
     gender :gender,
     course : course,
     address : address
})

Еще одна ошибка, на которую следует обратить внимание, это то, что вы назначаете неопределенные переменные в функции создания, это должно быть details.name, details.lastname ...

...