Node.js 快速:无法读取属性';forEach&x27;未定义的
在找到下一个解决方案之前,我在使用Express.js和SQL Server DB创建的api上发布时遇到了问题: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
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);
这使得参数
未定义