Проблемы с запросом и express в nodeJS - PullRequest
1 голос
/ 25 апреля 2020

Я разрабатываю веб-страницу, используя express для сервера с nodeJS. Я на странице регистрации и пытаюсь проверить введенные пользователем данные, но когда я делаю запрос, я получаю сообщение об ошибке.

auth. js

const express = require('express');
const router = express.Router();
const { bd } = require('../database');
const help_functions = require('../lib/common');

router.post('/signup', async (req,res) => {
    const fullname = req.body['fullname'];
    const email = req.body['email'];
    const username = req.body['username'];
    const password = req.body['password'];
    const password_repeat = req.body['password_repeat'];
    var validation_msg = help_functions.validateSignUp(fullname, email, username, password, password_repeat);
    validation_msg = await help_functions.checkRepeatedUserEmail(email);
});

база данных. js

const mysql = require('mysql');
const { promisify } = require('util');

const database =  { // Database credentials }
const bd = mysql.createPool(database);
bd.getConnection((err,connection) => {
    if (err) {
        if (err.code === 'PROTOCOL_CONNECTION_LOST') {
            console.error('Database connection failed !');
        }
        if (err.code === 'ER_CON_COUNT_ERROR') {
            console.error('Database has too many connections !');
        }
        if (err.code === 'ECONNREFUSED') {
            console.error('Database connection was refused !');
        }
    }
    if (connection) {
        connection.release();
        console.log('Database is connected !');
        return;
    }
});
bd.query = promisify(bd.query);
module.exports = bd;

общее. js

const { bd } = require('../database');
const helper_functions = {}

helper_functions.validateSignUp = (fullname, email, username, password, password_repeat) => {
    if (fullname === '' || email === '' || username === '' || password === '' || password_repeat === '') {
        return 'All the fields had to be completed!';
    }
    if (!(password.length >= 8 && (/\d/g.test(password) && (/[A-Z]/.test(password)))) ) {
        return 'The password needs to contain at least one capital letter, a number and 8 digits!';
    }
    if(password != password_repeat) {
        return 'Both passwords had to be the same!';
    }
    return 'Validated!';
}
helper_functions.checkRepeatedUserEmail = async (email) => {
    const user = await bd.query('SELECT * FROM users WHERE email = ?', [email]);
    if (user.length) {
        return 'This email is used, please change it!';
    } else {
        return 'Validated!';
    }
}
module.exports = helper_functions;

Ошибка говорит следующий текст:

(узел: 14616) UnhandledPromiseRejectionWarning: TypeError: Невозможно прочитать свойство 'query' из undefined в Object.helper_functions.checkRepeatedUserEmail (proyect_path / src / lib / common. js: 19 : 27) ..................

(узел: 14616) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за того, что внутри асинхронной функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch (). Чтобы завершить процесс узла при отклонении необработанного обещания, используйте флаг CLI --unhandled-rejections=strict (см. https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (идентификатор отклонения: 2) (узел: 14616) [DEP0018] Предупреждение об устаревании: отклонения необработанного обещания устарели. В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом выхода.

Кто-нибудь знает, что происходит ?? Спасибо за чтение!

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Вы выставляете базу данных как экспорт по умолчанию в database.js:

module.exports = bd;

Но вы импортируете ее, как если бы она была экспортирована с именем db:

const { bd } = require('../database');

Либо измените экспорт в database.js на:

module.exports = {
    bd: bd
};

, либо импортируйте его в файл common.js как:

const bd = require('../database');
0 голосов
/ 25 апреля 2020

Ошибка говорит о том, что db не определена как общая. js file может быть, вы допустили неправильное требование ('../ database'); в этом требовании есть ошибка. Используйте отладчик, чтобы остановиться на этом и посмотреть, получаете ли вы там дб или нет.

...