javascript - 如何将数组发布到 Express API
问题描述
我正在使用 Express.js 和 SQL Server 创建 API。我一直在发布一个简单且非常简单的对象,但现在我有一个新问题:如何发布一个数组?
假设我有一个只存储两个参数的表:
Table_A
Id | CouponId
事实上,存储的唯一记录是CouponId
,因为Id
SQL Server 在每条记录上都创建了 。因此,情况是我从 api 获得优惠券列表,想法是使用复选框从一个到“n”选择并保存选择。
到目前为止,这是我的代码:
function getList(){
$http.get('/api/coupons')
.then(function(data){
$scope.infoCoupons = data.data.Response;
}
在 HTML 视图中:
<div class="col-lg-12" align="center">
<input type="checkbox" ng-click="selectAll()"/> <a style="font-size:17px;color:black;text-decoration:none;">Select all coupons</a>
<ul class="coupon-list">
<li ng-repeat="coupon in infoCoupons">
<input type="checkbox" ng-model="coupon.Select" ng-click="checked"/> <a style="font-size:17px;color:black;text-decoration:none;">{{coupon.CodeCoupon}}</a>
</li>
</ul>
</div>
然后,要获得选定的优惠券:
$scope.selectAll = function(){
$scope.all = !$scope.all;
$scope.infoCoupons.forEach(function(o){
o.Select = $scope.all;
});
}
function chosenCoupons(){
var result = new Array();
var checked = 0;
$scope.infoCoupons.forEach(function(e){
if(e.Select === true){
result.push(e.Id);
checked +=1;
}
});
if($scope.all || checked > 0){
alert("Selected coupons!");
}
else if(checked === 0){
alert("Select at least one coupon");
}
}
然后,我的 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: "daServa",
database: "daDB"
};
const executeQuery = function (res, query, parameters) {
sql.connect(dbConfig, function (err) {
if (err) {
console.log(`There's an error: ${err}`);
res.send(err);
sql.close();
}
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(`Theres an error: ${err}`);
res.send(err);
sql.close();
}
else {
res.send(result);
sql.close();
}
});
}
});
}
app.post("/api/testApi", function(req, res){
parameters = [
{ name: 'CouponId', sqltype: sql.VarChar, value: req.body.CouponId }
];
var query = "INSERT INTO [Table_A] VALUES(@CouponId)";
executeQuery(res, query, parameters);
});
const PORT = process.env.PORT || 8080
app.listen(PORT, () => {
console.log(`App running on port ${PORT}`)
});
这是通常适用于对象的代码。我的问题是:我如何result
在 API 上发送(结果是获得的数组)。我需要在我的代码上更改某些内容parameters
吗?
希望您能够帮助我。我正在使用 Javascript、Node、Express 和 SQL Server。
解决方案
如何将数组发布到 Express API
在角度你只需做$http.post(url, data)
.
如果将数据分配给具有数组的对象,它将达到 express。
然后 express 可以解析身体,因为你有app.use(express.bodyParser());
,所以你应该可以在身体上使用对象。
URL 查询参数
如果您尝试使用查询参数来传递数组,可以说属性items
,因此您只需多次声明它
items=1&items=2&items=3
应该解析为req.query.items === [1,2,3]
推荐阅读
- reactjs - 如何让我的启动画面保持在 React 组件上
- xml - XSLT 从元数据创建子标签
- php - 从 CodeIgniter 中的数组中删除对象
- html - 如何使用 CSS 在跨度中选择一个类?
- python - 有没有办法使用数据框元组索引作为“x”输入来绘制条形图?
- office-js - 使用 Office 加载项将文本插入新会议的撰写正文
- c# - 如何根据数据的单位格式化 DataGrid 行
- reactjs - 如何在其他组件发送 this.state 并在父组件中渲染
- angular - catchError 之后的 switchMap 不发出值
- sql - 在插入日期时间 SQL 时从字符串转换日期和/或时间时转换失败