Nodejs и Hbase не могут установить заголовки после их отправки клиенту - PullRequest
0 голосов
/ 13 марта 2019

Я недавно начал использовать node.js и хотел бы интегрировать его с Hbase.Для этого я использовал библиотеку node-hbase .Я использую экспресс для обслуживания моих запросов.

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

Ниже приведена трассировка ошибки:

_http_outgoing.js:482
throw new ERR_HTTP_HEADERS_SENT('set');
^

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:482:11)
at ServerResponse.header (/Users/user/Documents/video-server/node_modules/express/lib/response.js:767:10)
at ServerResponse.send (/Users/user/Documents/video-server/node_modules/express/lib/response.js:170:12)
at ServerResponse.json (/Users/user/Documents/video-server/node_modules/express/lib/response.js:267:15)
at ServerResponse.send (/Users/user/Documents/video-server/node_modules/express/lib/response.js:158:21)
at Row.hclient.table.row.get (/Users/user/Documents/video-server/index.js:104:15)
at client.connection.get (/Users/user/Documents/video-server/node_modules/hbase/lib/row.js:61:22)
at IncomingMessage.<anonymous> (/Users/user/Documents/video-server/node_modules/hbase/lib/connection.js:131:16)
at IncomingMessage.emit (events.js:189:13)
at Socket.socketCloseListener (_http_client.js:363:11)

Код входа можно найти ниже:

// Login
app.post('/login', (req, res) => {
    const email = req.body.email;
    const password = req.body.password;


    hclient.table('user').row(email).get('data', (error, value) => {
        if (value == null) {
            // Send to the login view
            return res.status(400).send({invalidLogin: true});
        } else {

            // Checking the password
            const hash = crypto.createHash('sha256').update(password).digest('hex');

            // Find the user password
            const userPass = value.find(function(element) {
                return element.column === "data:password";
            })["$"];

            // Check if the supplied password matches the user password
            if (hash !== userPass) {
                return res.status(400).send({invalidLogin: true})
            }

            // There is a match so we continue

            // Session setting
            // Setting the firstname
            req.session.firstname = value.find(function(element) {
                return element.column === "data:firstname";
            })["$"];

            // Setting the last name
            req.session.lastname = value.find(function(element) {
                return element.column === "data:lastname";
            })["$"];


            // Redirecting to the homepage
            return res.send({redirect: "/"});
        }
    });
}); 

1 Ответ

0 голосов
/ 29 марта 2019

Ошибка была не с моей стороны, а расположена в библиотеке node-hbase. Метод обратного вызова вызывался дважды.

Обновлен до версии 0.6.0 и все работает гладко

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