Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Node.js 快速:无法读取属性';forEach&x27;未定义的_Node.js_Sql Server_Express - Fatal编程技术网

Node.js 快速:无法读取属性';forEach&x27;未定义的

Node.js 快速:无法读取属性';forEach&x27;未定义的,node.js,sql-server,express,Node.js,Sql Server,Express,在找到下一个解决方案之前,我在使用Express.js和SQL Server DB创建的api上发布时遇到了问题: const express = require('express'); const bodyParser = require('body-parser'); const sql = require('mssql'); const app = express(); app.use(bodyParser.json()); app.use(function (req, res, ne

在找到下一个解决方案之前,我在使用Express.js和SQL Server DB创建的api上发布时遇到了问题:

const express = require('express');
const bodyParser = require('body-parser');
const sql = require('mssql');
const app = express();

app.use(bodyParser.json());

app.use(function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, contentType,Content-Type, Accept, Authorization");
    next();
});

const dbConfig = {
    user: "daUser",
    password: "daPass",
    server: "daServer",
    database: "daDB"
};

const executeQuery = function (res, query, parameters) {
    sql.connect(dbConfig, function (err) {
        if (err) {
            console.log(err);
            res.send(err);
        }
        else {
            var request = new sql.Request();

            parameters.forEach(function (p) {
                request.input(p.name, p.sqltype, p.value);
            });

            request.query(query, function (err, result) {
                if (err) {
                    console.log(err);
                    res.send(err);
                    sql.close();
                }
                else {
                    res.send(result.recordsets);
                    sql.close();
                }
            });
        }
    });
}

//GET ALL
app.get("/api/InvoiceRequestTaxes", function (req, res) {
    var query = "SELECT * FROM [InvoiceRequestTaxes]";
    executeQuery(res, query);
});

//GET BY InvoiceRequestId
app.get("/api/InvoiceRequestTaxes/:idRequest", function (req, res) {
    const requestId = req.params.idRequest;
    var query = "SELECT * FROM [InvoiceRequestTaxes] WHERE InvoiceRequestId=" + requestId;
    executeQuery(res, query);
});

//POST
app.post("/api/InvoiceRequestTaxes", function (req, res) {
    const parameters = [
        { name: 'InvoiceRequestId', sqltype: sql.Int, value: req.body.InvoiceRequestId },
        { name: 'IdProduct', sqltype: sql.Int, value: req.body.IdProduct },
        { name: 'Price', sqltype: sql.Money, value: req.body.Price },
        { name: 'Cost', sqltype: sql.Money, value: req.body.Cost },
        { name: 'Margin', sqltype: sql.Money, value: req.body.Margin },
        { name: 'BaseMarginIVA', sqltype: sql.Money, value: req.body.BaseMarginIVA },
        { name: 'BaseCostIVA', sqltype: sql.Money, value: req.body.BaseCostIVA },
        { name: 'IVA', sqltype: sql.Money, value: req.body.IVA },
        { name: 'StatusId', sqltype: sql.Int, value: req.body.StatusId },
        { name: 'DateCreated', sqltype: sql.VarChar, value: req.body.DateCreated },
        { name: 'DateUpdated', sqltype: sql.VarChar, value: req.body.DateUpdated }
    ];
    var query = "INSERT INTO [InvoiceRequestTaxes](InvoiceRequestId, IdProduct, Price, Cost, Margin, BaseMarginIVA, BaseCostIVA, IVA, StatusId, DateCreated, DateUpdated) VALUES(@InvoiceRequestId, @IdProduct, @Price, @Cost, @Margin, @BaseMarginIVA, @BaseCostIVA, @IVA, @StatusId, @DateCreated, @DateUpdated)";
    executeQuery(res, query, parameters);
});

const PORT = process.env.PORT || 8080

app.listen(PORT, () => {
    console.log(`App running on port: ${PORT}`)
});
如您所见,我必须在
const executeQuery
上声明参数。我的问题出现在我玩triying游戏时,因为控制台会显示下一条消息:

无法读取未定义的属性“forEach”

在不发送任何参数的情况下,如何生成get方法

我试着只在柱子上传递参数,如下所示:

app.post("/api/InvoiceRequestTaxes", function (req, res, parameters) {
    const parameters = [
        { name: 'InvoiceRequestId', sqltype: sql.Int, value: req.body.InvoiceRequestId },
        { name: 'IdProduct', sqltype: sql.Int, value: req.body.IdProduct },
        { name: 'Price', sqltype: sql.Money, value: req.body.Price },
        { name: 'Cost', sqltype: sql.Money, value: req.body.Cost },
        { name: 'Margin', sqltype: sql.Money, value: req.body.Margin },
        { name: 'BaseMarginIVA', sqltype: sql.Money, value: req.body.BaseMarginIVA },
        { name: 'BaseCostIVA', sqltype: sql.Money, value: req.body.BaseCostIVA },
        { name: 'IVA', sqltype: sql.Money, value: req.body.IVA },
        { name: 'StatusId', sqltype: sql.Int, value: req.body.StatusId },
        { name: 'DateCreated', sqltype: sql.VarChar, value: req.body.DateCreated },
        { name: 'DateUpdated', sqltype: sql.VarChar, value: req.body.DateUpdated }
    ];

parameters.forEach(function (p) {
                request.input(p.name, p.sqltype, p.value);
            });

    var query = "INSERT INTO [InvoiceRequestTaxes](InvoiceRequestId, IdProduct, Price, Cost, Margin, BaseMarginIVA, BaseCostIVA, IVA, StatusId, DateCreated, DateUpdated) VALUES(@InvoiceRequestId, @IdProduct, @Price, @Cost, @Margin, @BaseMarginIVA, @BaseCostIVA, @IVA, @StatusId, @DateCreated, @DateUpdated)";
    executeQuery(res, query, parameters);
});
但现在我在控制台上看到另一个错误:

request.input不是一个函数

希望有人能帮助我


我正在使用Express.js、Node和SQL Server。

在函数executeQuery中为参数添加空检查

const executeQuery = function (res, query, parameters) {
    sql.connect(dbConfig, function (err) {
        if (err) {
            console.log(err);
            res.send(err);
        }
        else {
            var request = new sql.Request();
            if(parameters && parameters.length>0){
                parameters.forEach(function (p) {
                    request.input(p.name, p.sqltype, p.value);
                });
            }

            request.query(query, function (err, result) {
                if (err) {
                    console.log(err);
                    res.send(err);
                    sql.close();
                }
                else {
                    res.send(result.recordsets);
                    sql.close();
                }
            });
        }
    });
}

为函数executeQuery中的参数添加空检查

const executeQuery = function (res, query, parameters) {
    sql.connect(dbConfig, function (err) {
        if (err) {
            console.log(err);
            res.send(err);
        }
        else {
            var request = new sql.Request();
            if(parameters && parameters.length>0){
                parameters.forEach(function (p) {
                    request.input(p.name, p.sqltype, p.value);
                });
            }

            request.query(query, function (err, result) {
                if (err) {
                    console.log(err);
                    res.send(err);
                    sql.close();
                }
                else {
                    res.send(result.recordsets);
                    sql.close();
                }
            });
        }
    });
}

未定义
参数
函数参数

const executeQuery = function (res, query, parameters) {
    ...
    parameters.forEach(function (p) {
 // ^ parameters is not defined when you call the function
        request.input(p.name, p.sqltype, p.value);
    });
}
在您的通话中,您有:

executeQuery(res, query);

这使得
参数
未定义。

您的
参数
函数参数未定义

const executeQuery = function (res, query, parameters) {
    ...
    parameters.forEach(function (p) {
 // ^ parameters is not defined when you call the function
        request.input(p.name, p.sqltype, p.value);
    });
}
在您的通话中,您有:

executeQuery(res, query);
这使得
参数
未定义