Проблема с подходом и пониманием функционирования PG-обещания + Axios + Node.js - PullRequest
0 голосов
/ 20 сентября 2019

Я новичок в серверных технологиях.(Сам HTML-кодер) И для эксперимента я выполнял такой тип взаимодействия данных между клиентом и сервером (в локальной сети).

файл index.vue на стороне клиента:

<template>

  <div class="wrapper">

    <div class="chart">

    </div>
    <!--   <div class="chart">    end   -->

  </div>
  <!--   <div class="wrapper">    end    -->

</template>

<script>
  import axios from 'axios';

export default{

    data: function () {
      return {
        info: null
      }
    },

    mounted() {
      axios.get("http://localhost:2000/")
        .then(function (response) {
          console.clear();
          console.log(response);
        })
        .catch(function (error) {
          console.clear();
          console.log(error);
        });
    },

  }

</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

Файл index.js (который отвечает за ответ) на стороне сервера:

function z(){

  const m = require("./database.js");
  return m;

};

z().db.then(function (result) {

    const http = require('http');
    const port = 2000;

    const requestHandler = (request, response) => {
    response.writeHead(200, {
      'Access-Control-Allow-Origin': '*',
      'Content-Type': 'application/json',
      'X-Powered-By': 'bacon'
    });
    //console.log(request.method);
    //console.log(request.headers);
    //console.log(request.url.substring(5));
    //console.log(request.url);
    //console.log(request);

    response.write(JSON.stringify(result[0]));
    response.end();

    };

    const server = http.createServer(requestHandler);

    server.listen(port, (err) => {
        if (err) {
            return console.log('something bad happened', err)
        }
    });
});

И файл Database.js, который на стороне сервера отвечает за получение данных из базы данных:

console.time('test');

var pgp = require('pg-promise')(/*options*/);

var cn = {
    host: 'localhost', // server name or IP address;
    port: 5432,
    database: 'trading_database_eur_usd',
    user: 'postgres',
    password: '7256'
};

var db = pgp(cn); // database instance;

// select and return user name from id:

var myDb = '';

var newRequest = function(paramRequest){
  console.log(paramRequest);
  return  paramRequest || 'SELECT * FROM eur_usd WHERE primary_key = 4623209;';
};

var promise = new Promise(function(resolve, reject) {

  db.any(newRequest(myDb))
      .then(user => {
          resolve(user);
      })
      .catch(error => {
          reject(console.log(error)); // print the error;
      });

});

Но мой вопрос (и проблемы) заключается в том, что мне нужно создать параметризованный запрос от клиента - к базе данных.Грубо говоря, передайте команды sql от клиента на сервер и мгновенно получите ответ на них.До сих пор я предполагаю (но могу ошибаться), что частичное решение проблемы лежит где-то в этой плоскости документации pg-обещания:

ParameterizedQuery

Нопосле долгих попыток я не смог заставить работать код из доков.Если кто-то может подсказать или написать правильный синтаксис для обмена данными, который мне нужен, как со стороны axios, так и со стороны node.js - я буду очень признателен, поскольку я сам не знаю, с какой стороны подойти к решению этой проблемы,(ничего не выходит.) + Желательно, чтобы это было безопасное решение - потому что, насколько я понимаю, простой обмен данными опасен с точки зрения всех видов инъекций.

PS Iбыл бы признателен за любую помощь или конструктивный совет.

...