首页 > 解决方案 > 如何在 Sequelize 中插入数据

问题描述

在我的 Express 应用程序中,我必须向 MySQL 数据库插入一条新的表记录。我使用 Sequelize 作为 ORM。但是,使用以下设置,我无法做到这一点。当我向方法发送 POST 请求/users/registerUserController.signup()设置为在此路由上执行)时,它会永远等待 POSTman 中的响应。我尝试从中返回一个字符串UserController.signup(),然后请求工作正常。

为什么我不能在数据库中插入记录?每一个帮助都受到高度赞赏。

用户控制器.js

var User = require('../models/user')

module.exports = {
    signUp: (fname,email,password) => {
        User.create({ firstName: fname, email: email, password: password }).then(user => {
            console.log("New auto-generated ID:", user.id);
          });
    }
}

模型/user.js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define('User', {
    firstName: DataTypes.STRING,
    email: DataTypes.STRING,
    password: DataTypes.STRING
  }, {});
  User.associate = function(models) {
    // associations can be defined here
  };
  return User;
};

应用程序.js

var createError = require('http-errors');
var express = require('express');
var db = require('./database')
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var Router = require('./routes/index');

var app = express();

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());

app.use(Router);

db.authenticate()
.then(() => {
  console.log('Connection has been established successfully.');
})
.catch(err => {
  console.error('Unable to connect to the database:', err);
});

app.use(function(req, res, next) {
  next(createError(404));
});

app.use(function(err, req, res, next) {
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  res.status(err.status || 500);
});

module.exports = app;

数据库.js

const Sequelize = require('sequelize');

const sequelize = new Sequelize('test', 'root', '', {
  host: 'localhost',
  dialect: 'mariadb'
});

module.exports = sequelize

编辑

我改变models/user.js如下。

'use strict';
var sequelize = require('../database')
var Sequelize = require('sequelize')

const User = sequelize.define('User', {
  firstName: Sequelize.STRING,
  email: Sequelize.STRING,
  password: Sequelize.STRING
}, {});
User.associate = function(models) {
  // associations can be defined here
};

module.exports = User;

标签: expressmariadbsequelize.js

解决方案


将 id 属性添加到您的 User 模型。您正在尝试从 User 模型访问该值,但未声明它。它仍然会为您自动生成。尝试这样的事情:

模型 user.js

const User = sequelize.define('User', {
    id: {
      allowNull: false,
      autoIncrement: true,
      primaryKey: true,
      type: DataTypes.INTEGER
    },
    firstName: DataTypes.STRING,
    email: DataTypes.STRING,
    password: DataTypes.STRING
}, {});

移民 migration:generate --name createUser

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      firstName: {
        type: Sequelize.STRING
      },
      email: {
        type: Sequelize.STRING
      },
      password: {
        type: Sequelize.STRING
      },
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Users');
  }

推荐阅读