TypeError:this.build(...)。save不是函数

时间:2018-09-04 07:48:01

标签: node.js request sequelize.js

您好,我尝试将数据保存到数据库中,但返回错误:

/home/ria/gajiandulu/gajiandulu-api/node_modules/sequelize/lib/model.js:2035
}).save(options);

代码:

var data = []
router.get('/',  (req, res,next) => {
    request('http://localhost:3000/api/v1/promos',  (error, response, body) => {
        if(error) { 
            res.json('An erorr occured')
            console.log(error)
        }
        else {
            let result = JSON.parse(body)
            res.send(result.data)
            data.push(result.data)
        }
        console.log(data + "ini")

        const save_data = Test.create(data)
        if (save_data) {
            return res
            .status(201)
            .json(true, 'data has ben retrieved')
        }else{
            return res.status(400).json(response(false, error))
        }
    });
});

任何人都知道我的代码出了什么问题 ???????

2 个答案:

答案 0 :(得分:1)

如您所见 create函数接受Object不接受Array

public create(values: Object, options: Object): Promise

您传递的是Array

var data = []; // <---- HERE
router.get('/',  (req, res,next) => {
    request('http://localhost:3000/api/v1/promos',  (error, response, body) => {
        ...
        else {
            ...
            data.push(result.data) // <---- HERE
        }
        console.log(data + "ini")
        ...
        const save_data = Test.create(data) // <---- HERE
        ...
    });
});

如果要搜索创建多行,则可以使用bulkCreate而不是create

public static bulkCreate(records: Array, options: Object): Promise<Array<Model>>

答案 1 :(得分:1)

首先设置:

var data = []

接下来,将一个对象推入数组。

data.push(result.data)

问题在这里:

Test.create(data)

.create 需要“特殊对象” 而不是数组。它应该如下所示。

var create_data = { name_of_column_in_database_1: data_to_go_into_that_column_1, name_of_column_in_database_2: data_to_go_into_that_column_2 }

现在您可以说:

Test.create(create_data)

示例: 我有一列称为“ ticker”的列,我想放置一些从请求中获取的数据req.body.text。

使用 .create 发送到数据库的对象如下:

var create_data = { ticker: req.body.text } Test.create(create_data)

如果您仍然停留在要输入数据的列名以及要放入每个列的 result.data 中的值。