#node.js #express #hbase
#node.js #экспресс #hbase
Вопрос:
Недавно я начал использовать node.js и я хотел бы интегрировать это с Hbase. Для этого я решил использовать библиотеку node-hbase. Я использую express для выполнения своих запросов.
Я пытаюсь создать бизнес-логику для входа в систему пользователя, но, похоже, я не могу отправить ответ обратно пользователю. Я получаю сообщение «не удается установить заголовок после их отправки клиенту». Я дважды проверил, чтобы убедиться, что я не отправляю ответ клиенту дважды.
Ниже приведена трассировка ошибки:
_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:
Ошибка была не с моей стороны, а расположена в библиотеке node-hbase. Метод обратного вызова вызывался дважды.
Обновлен до версии 0.6.0, и все работает гладко