Express 如何在Sequelize中插入数据

Express 如何在Sequelize中插入数据,express,mariadb,sequelize.js,Express,Mariadb,Sequelize.js,在我的Express应用程序中,我必须向MySQL数据库插入一个新的表记录。我使用Sequelize作为ORM。但是,使用下面的设置,我无法做到这一点。当我向/users/register方法发送POST请求时(UserController.signup()设置为在此路由上执行),它将永远等待邮递员的响应。我尝试从UserController.signup()返回一个字符串,然后请求工作正常 为什么我不能将记录插入数据库?非常感谢您的帮助 UserController.js var User =

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

为什么我不能将记录插入数据库?非常感谢您的帮助

UserController.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);
          });
    }
}
'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;
};
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;
const Sequelize = require('sequelize');

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

module.exports = sequelize
models/user.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);
          });
    }
}
'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;
};
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;
const Sequelize = require('sequelize');

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

module.exports = sequelize
app.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);
          });
    }
}
'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;
};
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;
const Sequelize = require('sequelize');

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

module.exports = sequelize
database.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);
          });
    }
}
'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;
};
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;
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;

向用户模型添加id属性。您试图从用户模型访问该值,但未声明该值。它仍然会自动为您生成。试着这样做:

Model 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
}, {});
迁移
迁移:生成--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');
  }

添加
catch
并查看您得到的错误。正如我在“编辑”下的问题中提到的那样,我更改了
models/User.js
,它工作正常。但我首先发布的用户模型是为我定义的sequelize cli。我怎样才能使用它而不出错呢?编辑下的代码对我有效,但我想知道为什么以前的代码不起作用。你能解释一下前面的代码吗?因为该代码是由
sequelize cli
自动生成的。第一次尝试使用DataTypes.type,第二次尝试使用sequelize.type。根据我的经验,第一次创建表时,迁移文件中使用了Sequelize.type,模型文件中使用了数据类型。