如何将数组发布到Express API

时间:2019-01-02 21:48:32

标签: javascript node.js sql-server express

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

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

Table_A
Id | CouponId

事实上,唯一存储的记录是CouponId,因为SQL Server在每条记录上都创建了Id。因此,这种情况是,我从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}`)
});

这是通常用于对象的代码。我的问题是:如何在API上发送result(结果是获得的数组)。我需要更改我在parameters上的代码吗?

希望您能帮助我。我正在使用Javascript,Node,Express和SQL Server。

1 个答案:

答案 0 :(得分:0)

如何将数组发布到Express API

在角度上,您只需执行$http.post(url, data)

如果将数据分配给具有数组的对象,它将达到express。
然后,由于您拥有app.use(express.bodyParser());,因此express可以解析正文,因此该对象应该可以在正文上使用。

URL查询参数

如果您尝试使用查询参数来传递数组,请在属性items上说,这样就可以多次声明它

items=1&items=2&items=3应该解析为req.query.items === [1,2,3]