Sequilize.js - 协会,2桌

时间:2017-03-12 22:53:09

标签: javascript node.js sequelize.js

使用的技术:Node.js,Express.js,Sequilize.js

我试图连接两个表。有一个user表和一个color表。

color属于user,而user可以有一种颜色。

我的文件结构:

My Project
|__config
   |__db.js
|__models
  |__user.js
  |__color.js
|__routes
  |__index.js
|__app.js

在我的user.js文件中:

module.exports = function(sequelize, DataTypes) {
    return sequelize.define('user', {
        /* attributes, such as: username */
    });
};

在我的color.js文件中:

module.exports = function(sequelize, DataTypes) {
    return sequelize.define('color', {
        color: {
            type: DataTypes.STRING,
            allowNull: false
        }
    });
};

然后在db.js中,这是我配置这些文件的地方:

const db = {};

db.sequelize = sequelize;
db.Sequelize = Sequelize;

db.user = sequelize.import('../models/user.js');
db.color = sequelize.import('../models/color.js');


db.color.belongsTo(db.user);
db.user.hasOne(db.color);

module.exports = db;

现在是麻烦开始的地方。当有人创建新的user帐户(使用POST请求)时,他们还必须选择color。因此用户信息将进入user表,颜色信息将进入color表...但我该怎么做?如何在创建阶段链接这两个表。以下是我到目前为止的情况。

我的index.js文件中的POST请求是这样的:

const express = require('express');
const router = express.Router();
const db = require('../config/db');

router.post('/createNewUser', function(req, res) {
    const username = req.body.username
    const color = req.body.color

    db.user.create({
        username: username
        color: color
    }, {
       include: db.color
   }).then(function(result) {
        //do something
   }).catch(function(err) {
        //in case of error
   });
});

创建表工作正常(所有配置代码都在app.js文件中,此处未包含)。表格被创建;用户名将放入user表格中,颜色放在color表格中,但userID表格中的colornull.

1 个答案:

答案 0 :(得分:0)

好的问题解决了。在我创建新用户和颜色的地方,它应该如下所示:

router.post('/createNewUser', function(req, res) {
    const username = req.body.username
    const color = req.body.color

    db.color.create({
        color: color
        user: {
            username: username
        }
    }, {
       include: [db.color]
   }).then(function(result) {
        //do something
   }).catch(function(err) {
        //in case of error
   });
});

这会将两张桌子连在一起;它会自动在名为color的{​​{1}}表格中创建一个列,该列与userID表格中的id值相同。