#javascript #node.js #express
#язык JavaScript #node.js #экспресс
Вопрос:
Это мой маршрутизатор маршрута.сообщение(«/создать», isAdm ,учебники.создать); Это conroller.js
exports.create = (req, res, bool) =gt; { // Validate request if (!req.body) { res.status(400).send({ message: "Content can not be empty!" }); } else { if (bool) { let crypto = require('crypto'); let hash = crypto.createHash('md5').update(req.body.password).digest('hex'); console.log(req.body) // Create a User const user = new Users({ username: req.body.username, password: hash, fullname: req.body.fullname }); // Save Tutorial in the database Users.create(user, (err, data) =gt; { if (err) { res.status(500).send({ message: err.message || "Some error occurred while creating the User." }); } else { res.send(data); } }); } else{ res.send("Unauthorized") } } };
это модель, которую я использую
const User = function(user) { this.username = user.username; this.password = user.password; this.fullname = user.fullname; }; User.create = (newUser, result) =gt; { sql.query("INSERT INTO users SET ?", newUser, (err, res) =gt; { if (err) { console.log("error: ", err); result(err, null); return; } console.log("created User: ", { id: res.insertId, ...newUser }); result(null, { id: res.insertId, ...newUser }); }); };
Это промежуточное программное обеспечение isAdm
const sqladminchecker = require("../db/index"); const JWTTOKEN = require('jsonwebtoken') require('dotenv') const isAdmin = (req, res, next) =gt; { // Getting JWT from Cookies let jwtToken: string = '' let i: number try { let cookies = req.headers.cookie.split('; ') for (i = 0; i lt; cookies.length; i ) { if (cookies[i].startsWith('jwt') != false) { jwtToken = cookies[i].split('=')[1] } } if (jwtToken != '') { const jwtData = JWTTOKEN.verify(jwtToken, process.env.JWT_SECRET) const { username, id } = jwtData // req.id = id sqladminchecker.query( "SELECT * FROM users WHERE id = ? AND isAdmin = ?", [id, 1], (err, reslt) =gt; { try { if (!err) { if (reslt.length == 1) { next(true) } else { console.log('else') next(false) } } } catch { console.log('catch') next(false) } } ); } next() } catch { next(false) } } module.exports = isAdmin
this is the console error i’m getting
созданный пользователь: { идентификатор: 15, имя пользователя: ‘dccdcdd’, пароль: ‘0fac4fe563f30f5fa080216251074ad7’, полное имя: ‘Минхазул Асиф’ } Ошибка [ERR_HTTP_HEADERS_SENT]: Не удается установить заголовки после их отправки клиенту в новом узле Ошибка (узел:внутренний/ошибки:371:5) в ServerResponse.setHeader (узел:_http_outgoing:576:11) в Ответ сервера.заголовок (/home/fahimaloy/Рабочий стол/Hospital_Project/серверная часть/node_модули/экспресс/lib/ответ.js:771:10) в ответе сервера.отправьте (/home/fahimaloy/Рабочий стол/Hospital_Project/серверная часть/node_modules/express/lib/response.js:170:12) на серверный ответ.json (/home/fahimaloy/Рабочий стол/Hospital_Project/серверная часть/node_modules/express/lib/response.js:267:15) в /home/fahimaloy/Рабочий стол/Hospital_Project/серверная часть/контроллер/пользователь.контроллер.ts:29:24 при запросе. (/home/fahimaloy/Рабочий стол/Hospital_Project/серверная часть/модели/пользователь.модель.ts:19:5) по запросу. (/home/fahimaloy/Рабочий стол/Hospital_Project/серверная часть/node_modules/mysql/lib/Соединение.js:526:10) при запросе._callback (/home/fahimaloy/Рабочий стол/Hospital_Project/серверная часть/node_modules/mysql/lib/Соединение.js:488:16) при запросе.Последовательность.конец (/home/fahimaloy/Desktop/Hospital_Project/backend/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24) { код: ‘ERR_HTTP_HEADERS_SENT’ }
это решает проблему, если я не использую промежуточное программное обеспечение «isAdm», что мне делать?
Ответ №1:
Код контроллера не ожидает переданного обратного User.create
вызова, потому что вы не ждете его результата. Используйте async/await
для достижения этого:
exports.create = async (req, res, bool) =gt; { ... // Save Tutorial in the database try { // if Users.create supports callbacks only you always can wrap this with Promise const createdUser = await Users.create(user); res.send(createdUser); } catch (err) { res.status(500).send({ message: err.message || "Some error occurred while creating the User." }); }
Комментарии:
1. Большое спасибо. это решает проблему