Как разместить массив в Express API - PullRequest
0 голосов
/ 03 января 2019

Я создаю API с помощью Express.js и SQL Server.Я публиковал объект, который прост и очень прост, но теперь у меня есть новый вопрос: как разместить массив?

Допустим, у меня есть таблица, в которой хранятся только два параметра:

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.

1 Ответ

0 голосов
/ 03 января 2019

Как разместить массив в Express API

В угловом режиме вы просто делаете $http.post(url, data).

Если вы назначите данные объекту, у которого есть массив, он достигнет экспресса.
Тогда экспресс может проанализировать тело, так как у вас есть app.use(express.bodyParser());, поэтому объект должен быть доступен вам на теле.

Параметры URL-запроса

Если вы пытаетесь использовать параметры запроса, для передачи массива, скажем, по атрибуту items, поэтому вы просто объявляете его несколько раз

items=1&items=2&items=3 должен быть разобран до req.query.items === [1,2,3]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...