Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为app.POST server创建多个SQL语句查询_Javascript_Mysql_Node.js - Fatal编程技术网

Javascript 为app.POST server创建多个SQL语句查询

Javascript 为app.POST server创建多个SQL语句查询,javascript,mysql,node.js,Javascript,Mysql,Node.js,我目前一直在尝试在server.js中的app.post函数上运行多个insert SQL语句。这是一个视频游戏数据库。 首先,我尝试了被注释掉的方法,但在尝试插入新游戏时,会收到一个错误,说“列索引超出范围”。因此,我尝试了未注释的函数,看看是否可以一次执行一个,但我现在收到的错误是“发送到客户端后无法设置头” “this.all”调用此函数 //database.js class DB{ constructor(){ this.db = new sqlite3.Da

我目前一直在尝试在server.js中的app.post函数上运行多个insert SQL语句。这是一个视频游戏数据库。 首先,我尝试了被注释掉的方法,但在尝试插入新游戏时,会收到一个错误,说“列索引超出范围”。因此,我尝试了未注释的函数,看看是否可以一次执行一个,但我现在收到的错误是“发送到客户端后无法设置头”

“this.all”调用此函数

//database.js

class DB{
    constructor(){
        this.db = new sqlite3.Database(DBSOURCE, (err) => { 
            if(err){    //callback 
                // Cannot open Database
                console.error(err.message)
                throw err
            }else{
                console.log('Connnected to the SQLite database.')
            }
        })
    }

    all(sql, params = []) {
        return new Promise((resolve, reject) => {
            this.db.all(sql, params, (err, rows) => {
                if(err){
                    console.log('Error running sql: ' + sql)
                    console.log(err)
                    reject(err)
                }   else{
                    resolve(rows)
                }
            })
        })
    }
    ...
}

为了澄清一下,我从HTML表单数据部分获取了所有数据,然后将其设置为您在这里看到的“data.publisher,data.developer,…”

所以我想我找到了答案。我一直得到“发送到客户机后无法设置头”的原因是我在每次函数调用后都尝试res.json。我为此做的修复是删除所有带有res.json的.then语句,并将其仅移动到最后一个函数。json基本上是请求调用的一个finishing语句,这就是发送头的原因,之后就不能再发送了。以下是有效的解决方案

videogames.insertNewGame(data.gameTitle, data.year, data.genre)
        .catch(err => {
            res.status(400).json({"error":err.message})
        })
videogames.updateNewGame(data.gameTitle, data.platformCB)
    .catch(err => {
        res.status(400).json({"error":err.message})
    })
videogames.insertPublisher(data.publisher)
    .catch(err => {
        res.status(400).json({"error":err.message})
    })
videogames.insertDeveloper(data.developer)
    .catch(err => {
        res.status(400).json({"error":err.message})
    })
videogames.insertContract(data.gameTitle, data.publisher, data.developer)
    .then(() => {
        res.json({
            "message":`Success! inserted new game`,
            "data":data.gameTitle
        })            
    })
    .catch(err => {
        res.status(400).json({"error":err.message})
    })

请添加代码片段而不是屏幕截图链接。我不能这样做,因为我是一个新用户,堆栈溢出需要一定数量的信誉点。在这种情况下,我认为,至少新用户可以添加代码示例。你说得对,这是更新版本。你想使用的第一个函数没有问题。通常,错误
列超出范围
意味着您试图插入到一个不存在的列中(即,您有一个输入错误,因为您无意中引用了另一个表)。另外,显然,您需要使用新的INSERT查询更新
videogames.insertNewGame()
函数,并接受要传递给它的所有参数。
//database.js

class DB{
    constructor(){
        this.db = new sqlite3.Database(DBSOURCE, (err) => { 
            if(err){    //callback 
                // Cannot open Database
                console.error(err.message)
                throw err
            }else{
                console.log('Connnected to the SQLite database.')
            }
        })
    }

    all(sql, params = []) {
        return new Promise((resolve, reject) => {
            this.db.all(sql, params, (err, rows) => {
                if(err){
                    console.log('Error running sql: ' + sql)
                    console.log(err)
                    reject(err)
                }   else{
                    resolve(rows)
                }
            })
        })
    }
    ...
}
videogames.insertNewGame(data.gameTitle, data.year, data.genre)
        .catch(err => {
            res.status(400).json({"error":err.message})
        })
videogames.updateNewGame(data.gameTitle, data.platformCB)
    .catch(err => {
        res.status(400).json({"error":err.message})
    })
videogames.insertPublisher(data.publisher)
    .catch(err => {
        res.status(400).json({"error":err.message})
    })
videogames.insertDeveloper(data.developer)
    .catch(err => {
        res.status(400).json({"error":err.message})
    })
videogames.insertContract(data.gameTitle, data.publisher, data.developer)
    .then(() => {
        res.json({
            "message":`Success! inserted new game`,
            "data":data.gameTitle
        })            
    })
    .catch(err => {
        res.status(400).json({"error":err.message})
    })