Ошибка: "UnhandledPromiseRejectionWarning: TypeError: response.json is not a function"
Пытаюсь получить данные с БД:
export async function Otdel() {
try {
const cards = await sequelize.query(
'select * from sta_otdel',
{
type: QueryTypes.SELECT,
},
);
if (!cards) {
return { success: false, error: ErrorCode.notFound };
}
return {
success: true,
content: cards,
};
} catch (error) {
console.log(error.message);
return { success: false, error: ErrorCode.unexpectedError };
}
}
async function tableDocuments(response: Response) {
const data = await incomingService.tableDocuments.Otdel()
return response.json(data)
}
На клиенте получаю с помощью axios:
const response = await axios.get(`/incoming/tableDocuments`, {
headers: { authorization: "Bearer " + User.token },
cancelToken: tableDocumentsCancelToken.token,
})
if (response.data?.success) {
return {
type: "ok",
content: response.data.content,
info: response.data.info,
}
}
Почему возникает эта ошибка?
Ответы (1 шт):
Автор решения: nörbörnën
→ Ссылка
Обработчик запроса express принимает 3 параметра: request, response и next function.
В вашем обработчике, функция tableDocuments, принимается первый параметр (request) и используется как второй параметр (response). Это не правильно так как порядок аргументов функции должен быт соблюден!
Судя по коду, ваше приложение написано на typescript, вот краткий пример правильного обработчика:
import * as express from 'express';
// Router
const router = express.Router();
const tableDocuments: express.RequestHandler = async (_, res, next) => {
try {
const data = {ok: true};
return res.json(data);
} catch (err) {
return next(err);
}
};
router.get('/', tableDocuments);
// Application
const app = express();
app.use('/tableDocuments', router);
app.listen(3002, 'localhost');
Проверено на node.js v15.0.1, typescript v4.0.5