首页 > 解决方案 > 如何将数组发布到 Express API

问题描述

我正在使用 Express.js 和 SQL Server 创建 API。我一直在发布一个简单且非常简单的对象,但现在我有一个新问题:如何发布一个数组?

假设我有一个只存储两个参数的表:

Table_A
Id | CouponId

事实上,存储的唯一记录是CouponId,因为IdSQL 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。

标签: javascriptnode.jssql-serverexpress

解决方案


如何将数组发布到 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]


推荐阅读