Веб-страница React не может скомпилироваться после импорта npm модулей - PullRequest
0 голосов
/ 24 марта 2020

У меня есть веб-страница с кнопкой, созданной с реагированием. Я хочу выполнить код js при нажатии кнопки. Код, который я хочу выполнить, - это модуль npm, который я создал, для которого требуются pg и fs, и он будет обрабатывать связь с сервером psql. Когда я добавляю «const database = require ('../ datadb / datadb. js')» (строка 2) в мой код, реагировать не удается скомпилировать. Ниже приведен код моей кнопки.

import React, { Component } from "react";
const database = require('../datadb/datadb.js'); //HERE is the line that causes compilation failure

/* 
A function that handles when the LoadData button is clicked. This will allow for the data to be loaded in and stored into a database that can then be referenced.
*/
function Data() {
  alert("'The data is loading'"); //Creates a pop up box
  //HERE is where I will want to execute my modules code
}

/*
This function creates a component for the buttons. 
*/
class LoadData extends Component {
  render() {
    return (
      <div className="App">
        <button onClick={Data}>Load Data</button>
        <button>Open</button>
        <button>Save</button>
      </div>
    );
  }
}
export default LoadData;

, которое выдает сообщение об ошибке:

Failed to compile.

./src/datadb/node_modules/semver/semver.browser.js
  Line 1180:37:  'define' is not defined  no-undef
  Line 1181:3:   'define' is not defined  no-undef
  Line 1185:35:  'define' is not defined  no-undef
  Line 1186:3:   'semver' is not defined  no-undef

Я самостоятельно проверил свой модуль datadb, и он работал нормально. Веб-страница загружается должным образом, и кнопка работает (как в предупреждении, работает должным образом в строке 10)

Я очень плохо знаком с кодированием, связанным с веб-страницей, как реагировать и javascript (большая часть моего опыта в Java и некоторые C) и были переданы этому проекту для реализации моего кода, но я не сделал веб-страницу или кнопку, поэтому я очень незнаком с реакцией. Модули npm не экспортируются, чтобы реагировать?

Вот файл базы данных. js по запросу

var fs = require('fs')
const {Client} = require('pg')






/**Connects to the client, then inserts all of the data from the given data array
 * 
 * @param {*} dataArray the data to insert
 * @param {*} client the DB client to connect to
 */
var insertRawData = async function(dataArray) {

    const client = new Client({
        user: "postgres",
        password: "password123",
        post: "5432",
        database: "first"
    })
    try {
        await client.connect()
        await client.query("BEGIN")

        var length = dataArray.length;
        for(let i = 0; i < length; i++) {
            queryString = "INSERT INTO rawdata.rawtable VALUES ( " + dataArray[i][0] + ", '" + dataArray[i][1] + "', " + dataArray[i][2] + ", " + dataArray[i][3] + ", " + dataArray[i][4] + ", " + dataArray[i][5] + ", " + dataArray[i][6] + ", " + dataArray[i][7] + ", " + dataArray[i][8] + ", " + dataArray[i][9] + ", " + dataArray[i][10] + ")" ;
            await client.query(queryString)
            console.log("NEW ROW INSERTED: " + queryString);
        }
        await client.query("COMMIT")

    } catch (err) {
        console.log("somethings wrong" + err)
    } finally {
        await client.end()
        console.log("Connection ended")
    }
}


/** 
 * Deletes all of the entries in the rawdata.rawtable table
 */
var deleteAllData = async function() {

    const client = new Client({
        user: "postgres",
        password: "password123",
        post: "5432",
        database: "first"
    })

    try {
        await client.connect()
        await client.query("DELETE FROM rawdata.rawtable WHERE year=1 OR year!=1")
    } catch (err) {
        console.log("somethings wrong" + err)
    } finally {
        await client.end()
        console.log("Connection ended")
    }
}


/** 
 * Returns the entire database
 */
var getAllData = async function () {
    const client = new Client({
        user: "postgres",
        password: "password123",
        post: "5432",
        database: "first"
    })

    var data;
    try {
        await client.connect()
        data = await client.query("SELECT * FROM rawdata.rawtable")
    } catch (err) {
        console.log("somethings wrong" + err)
    } finally {
        await client.end()
        console.log("Connection ended")
    }
    return data;
}

/** takes raw data returned from a SELECT psql query as input, returns the data 
 * in a 2d array format
 * 
 * @param {*} data the raw data returned from a query
 * @returns {*} the parsed data
 */
var parseDataFromQuery = async function(data){
    var returnValue = [];
    console.log("DATA: " + data.rows[0].year);

    var dataSize = data.rows.length;

    for(var i = 0; i < dataSize; i++){
        returnValue.push([data.rows[i].year, data.rows[i].month, data.rows[i].occupancy, data.rows[i].adr, data.rows[i].revpar, data.rows[i].supply, data.rows[i].demand, data.rows[i].revinue, data.rows[i].cprops, data.rows[i].crooms, data.rows[i].sparts]);
    }
    console.log(returnValue);
}



var selectTest = async function(){
    const client = new Client({
        user: "postgres",
        password: "password123",
        post: "5432",
        database: "first"
    })

    var data;
    try {
        await client.connect()
        data = await client.query("SELECT * FROM rawdata.rawtable WHERE year=9 AND month='Jan'")
    } catch (err) {
        console.log("somethings wrong" + err)
    } finally {
        await client.end()
        console.log("Connection ended")
    }

    console.log(parseDataFromQuery(data, ['year']));
    //return data;
}



/**
 * Exports the functions to be used elsewhere
 */
module.exports = {
    insertRawData: insertRawData,
    deleteAllData: deleteAllData,
    getAllData: getAllData,
    selectTest: selectTest,
    parseDataFromQuery: parseDataFromQuery
};

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Итак, как мы выяснили, вы попытались запустить код на стороне сервера (используя PostgreSQL lib) в приложении веб-интерфейса реагирования, что приводит к тому, что ваш код не компилируется.

Итак, я предложит вам взглянуть на эти ссылки, чтобы понять, как создать NodeJS сервер API, с Express и PostgreSQL.

  1. https://medium.com/@olinations / build-a -crud-template-using-реагировать- bootstrap - express - postgres -9f84cc444438 (ReactJS + Express + PostgreSQL)
  2. https://blog.logrocket.com/setting-up-a-restful-api-with-node-js-and-postgresql-d96d6fc892d8/ (только Express + PostgreSQL)
  3. https://kb.objectrocket.com/postgresql/nodejs-express-postgresql-tutorial-part-1-960 (только Express + PostgreSQL)

И, наконец, рекомендую вам нужно взглянуть на Ax ios, который поможет вам сделать вызов вашего API.

Веселитесь!

0 голосов
/ 24 марта 2020

Несколько возможных решений этой проблемы.

  1. Пожалуйста, используйте import вместо require для вашего модуля - хотя, похоже, то же самое, Webpack может обрабатывать динамический c импорт и требования иным образом при компиляции кода.
  2. Судя по названию вашего файла, это то, что должно быть выполнено скорее на стороне сервера (aka Node.js service), а не на стороне клиента (в этот случай - Реагирует на одностраничное приложение). Возможно, попробуйте переместить логи c, связанные с базой данных на стороне сервера, и скомпилировать эти логи c там?
...