Здравствуйте!
Есть проект с гита на ноде со slonik (библиотека для взаимодействия с базой данных), я его запустил, смотрю как работает. Отправляю с Postman запросы ему - если просто на api - запрос работает, проблем нет. Если же требуется взаимодействие с базой данных, то выходит ошибка:
TypeError: slonik_1.sql.raw is not a function.
ранее я понизил версию slonik, потому что в этих же местах (с sql.raw) выходила другая ошибка: Property 'raw' does not exist on type. Там библиотека как-то странно ставилась и на интерфейс raw ссылка не делалась.
я гуглил ошибку "TypeError: slonik_1.sql.raw is not a function." - есть решение похожее
здесь , но это или не мой случай или мне не хватает знаний и опыта подвести под свой случай. Там db.query предлагают заменить db.serialize.query. Я попробовал вместо:
slonik_1.sql.raw
сделать:
slonik_1.sql.serialize.raw
но это не помогло - мой код не знает типа serialize для sql.
Вопрос: что можно попробовать сделать чтобы зафиксить ошибку?
Дополнительная информация к вопросу:
1) О том что я делаю:
- Проект представляет из себя бекенд для мобильного приложения: обрабатывает запросы/принимает/отправляет данные. Я хочу разобраться как работает бек-энд. Для этого я на локальном хосте развернул и соединил его с БД Postgresql также на локальном сервере (хотя точной уверенности что соединение с БД налажено у меня нет, но ошибок по определению url БД не выходит). Т.к. мобильного приложения у меня нет, я использую в качестве клиента Postman.
- У бекенда есть файл Api, где обрабатываются запросы. Сначала я проверил GET запрос, просто вставив в файл Api обработку запроса прямо сразу с данными (чтобы не трогать БД) и с Postman отправил запрос на порт с приложением. Все ок, запрос вернулся, данные принес.
- Сейчас хочу протянуться глубже и достать до БД: составить Post запрос в Postman, чтобы бэкэнд его записал в базу данных. Но получаю в Postman в ответ на запрос записи данных ошибку "internal", а в visual studio code ошибку: TypeError: slonik_1.sql.raw is not a function.
2) Ошибка поподробнее:
Если подробнее, ошибка выглядит так (приложение при этом не вылетает):
TypeError: slonik_1.sql.raw is not a function
at Object.getToken (C:\Users\user\Desktop\backend\dist\db.js:87:32)
at C:\Users\user\Desktop\backend\dist\api.js:336:32
at C:\Users\user\Desktop\backend\dist\api.js:278:30
at Layer.handle [as handle_request] (C:\Users\user\Desktop\backend\node_modules\express\lib\router\layer.js:95:5)
at next (C:Users\user\Desktop\backend\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\user\Desktop\backend\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\user\Desktop\backend\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\user\Desktop\backend\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Users\user\Desktop\backend\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\user\Desktop\backend\node_modules\express\lib\router\index.js:275:10)
at C:\Users\user\Desktop\backend\dist\api.js:68:5
at Layer.handle [as handle_request] (C:\Users\user\Desktop\backend\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (C:\Users\user\Desktop\backend\node_modules\express\lib\router\index.js:317:13)
at C:\Users\user\Desktop\backend\node_modules\express\lib\router\index.js:284:7
at Function.process_params (C:\Users\user\Desktop\backend\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\user\Desktop\backend\node_modules\express\lib\router\index.js:275:10)
3) cтек инструментов (из packege.json):
google_maps, sindresorhus/slugify, bcrypt, bcryptjs, body-parser, cors, cron, express, fcm-push, lodash, ms, node-fetch, pg, reflect-metadata, sendgrid, slonik, socket.io
сам бэкэнд на node js на ts.
4) общий вид кода:
кроме api - где идет обработка запросов (по принципу app.post('/someReq', function cheking mistakesAndToken, await db.doSomething) отдельно есть файл db, который импортируется в api.
app это
export const app = Express();
bd это
файл с функциями обращения к базе данных при помощи slonik.
5) места где ошибка поподробнее:
ошибки вида:
Property 'raw' does not exist on type 'SqlTaggedTemplateType'.;
почти везде в местах сочленения sql c чем-либо (sql отсюда: import { createPool, sql } from 'slonik'). Если понизить версию слоника - ошибки уйдут - но на результатах запроса POST из Postman это никак не отразится (и в Postman и в Visual Studuo).
Примеры строк где ошибки:
const escapeNames = (names: string[]) => sql.raw(names.map(x => escapeName(x).sql).join(', ')); //(raw - подчеркивается)
const svalue = value => sql.valueList([value]); //(valueList- подчеркивается)
function _insert(obj) {
const schema = Schema.get(obj);
const keys = schema.cols.map(x => x[0]).filter(x => !schema.serials.includes(x));
return sql`
INSERT INTO ${escapeName(schema.name)} (${escapeNames(keys)})
VALUES ${sql.tuple(keys.map(x => obj[x]))}
`;//(.tuple - подчеркивается)
}