Как исправить «TypeError: Crud.Select_products не является функцией», ошибка в NodeJS - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь получить доступ к экспортированному классу из файла Crud.js, но я получаю эту ошибку. Моя цель - выполнить SQL-запрос.

Ошибка:

TypeError: Crud.Select_products is not a function
  at C:\xampp\htdocs\react\crud\server.js:7:24
  at Layer.handle [as handle_request] (C:\xampp\htdocs\react\crud\node_modules\express\lib\router\layer.js:95:5)
  at next (C:\xampp\htdocs\react\crud\node_modules\express\lib\router\route.js:137:13)
  at Route.dispatch (C:\xampp\htdocs\react\crud\node_modules\express\lib\router\route.js:112:3)
  at Layer.handle [as handle_request] (C:\xampp\htdocs\react\crud\node_modules\express\lib\router\layer.js:95:5)
  at C:\xampp\htdocs\react\crud\node_modules\express\lib\router\index.js:281:22
  at Function.process_params (C:\xampp\htdocs\react\crud\node_modules\express\lib\router\index.js:335:12)
  at next (C:\xampp\htdocs\react\crud\node_modules\express\lib\router\index.js:275:10)
  at expressInit (C:\xampp\htdocs\react\crud\node_modules\express\lib\middleware\init.js:40:5)
  at Layer.handle [as handle_request] (C:\xampp\htdocs\react\crud\node_modules\express\lib\router\layer.js:95:5)

Я использую NodeJs в версии 10.15.0, я уже пытался изменить способ экспорта, но у меня все еще та же ошибка.

Server.js

var express = require('express');
var Crud = require('./database/Crud');
var app = express();


app.get('/api/home', function(req, res){
    let results = Crud.Select_products();
    res.send(results);

});

app.listen(5000, () => console.log('Escutando na porta 5000'));

Crud.js

var Connect = require('./Connect');

Class Crud {

  constructor(){
    Connect.Connecting();
  }

  Select_products(where){
    if(where !== undefined){
        let sql = 'Select * from produtos where id_produto = ?';
        Connect.query(sql, [where], function(err, result){
            if(err) throw err;
            return result;
        });
    }else{
        Connect.query('Select * from produtos', function(err, result){
            if(err) throw err;
            return result;
        });
    }
  }
}

module.exports = Crud;

Я ожидаю получить данные из базы данных.

1 Ответ

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

Crud - это класс, и вы пытаетесь получить доступ к методу, методы принадлежат экземплярам.

Вы можете экспортировать экземпляр, создав одноэлементный шаблон, например:

module.exports = new Crud();

Или вы можете создать экземпляр на вашем server.js и вызвать метод

var Crud = require('./database/Crud');
var crud = new Crud();

app.get('/api/home', function(req, res){
  let results = crud.Select_products();
  res.send(results);
});

Кроме того, когда вы заставите это работать, вы поймете, что у вас больше проблем. Ваша Select_products() функция ничего не возвращает. Возможно, вы захотите отправить ему функцию обратного вызова или использовать async/await и обещания, если используемая вами библиотека поддерживает обещания

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