Node js oracle подключение

Обновлено: 04.07.2024

В данный момент мы используем статические данные для отображения информации о пользователе в формате JSON при обращении к конечной точке API при помощи запроса по методу GET . В этом руководстве мы настроим базу данных MySQL для хранения данных, подключимся к ней из нашего приложения Node и добавим в API возможность использования методов GET , POST , PUT и DELETE для завершения реализации полноценного API.

Установка

На данный момент мы еще не использовали базу данных для хранения и выполнения манипуляций с какими-либо данными, так что мы установим ее сейчас. В этом руководстве мы будем использовать MySQL, и если у вас уже она установлена, то вы можете перейти к следующему разделу.

Если же нет, то вы можете скачать MAMP для macOS и Windows, который предоставляет бесплатную локальную инфраструктуру веб-сервера и базу данных. После их скачивания откройте программу и нажмите Start Servers для запуска MySQL.

Помимо настройки MySQL нам также необходимо программное обеспечение с GUI для просмотра данных базы. Если вы пользуетесь Mac, то скачайте SequelPro, если Windows – то SQLyog. После скачивания и запуска MySQL вы можете воспользоваться SequelPro или SQLyog для подключения к локальному серверу при помощи имени root и пароля root по 3306 порту.

Как только разобрались с этим, мы можем перейти к созданию базы данных для нашего API.

Создаем базу данных

В программе для просмотра вашей базы добавьте новую базу данных и назовите ее api . Убедитесь, что MySQL запущена, или у вас не получится подключиться к локальному серверу.

После создания базы api перейдите в нее и выполните следующий запрос для создания новой таблицы.

При помощи этого запроса SQL будет создана структура таблицы с нашими пользователями. У каждого пользователя будет id, значение которого приращивается автоматически, имя и адрес электронной почты.

Также мы можем заполнить базу данных теми же данными, которые в данный момент отображаем, используя статический массив данных в формате JSON, при помощи запроса INSERT .

Нет необходимости во введении поля id , поскольку его значения приращиваются автоматически. Теперь у нас имеются структура наших таблиц и некоторые пробные данные для работы.

Подключаемся к MySQL

Возвращаемся к нашему приложению, где нам необходимо подключиться к MySQL из Node для начала работы с данными. Ранее мы установили модуль npm mysql и теперь мы им воспользуемся.

Создайте новую папку под названием data и файл config.js.

Мы начнем с запрашивания модуля mysql в data/config.js.

Давайте создадим объект config , в котором будут находиться данные о хосте, имя пользователя, его пароль и название базы. В нем должна быть указана база данных api , которую мы создали, и должны использоваться настройки по умолчанию локального сервера.

Для повышения продуктивности мы создадим пул MySQL, что позволяет нам использовать множество подключений одновременно, а не открывать и закрывать их вручную.

Наконец, мы экспортируем пул MySQL, благодаря чему приложение сможет им воспользоваться.

Вы можете ознакомиться с полным конфигурационным файлом в нашем репозитории GitHub.

Теперь, когда мы подключены к базе и завершили с настройками, пришло время перейти к взаимодействию с базой данных из нашего API.

Получение данных из MySQL

В данный момент в нашем файле routes.js массив с данными о пользователях в формате JSON создается вручную и выглядит следующим образом:

Поскольку мы более не собираемся использовать статические данные, мы можем удалить весь массив и заменить его ссылкой на пул нашей базы.

Ранее при запросах по методу GET , отправляемых по адресу /users , обратно возвращались статические данные, хранящиеся в переменной users . В нашем обновленном коде эти данные будут запрашиваться из базы данных. Мы воспользуемся запросом SQL SELECT для выбора всех данных из таблицы users , что выглядит следующим образом:

Ниже показано, как будет выглядеть наша конечная точка для обработки запросов по методу GET, приходящих по адресу /users , в которой используется метод pool.query() .

Тут мы выполняем запрос SELECT и затем отправляем результат в формате JSON клиенту при помощи конечной точки, в качестве URL-адреса которой указано /users . Если вы перезапустите сервер и перейдете на страницу по адресу /users , то увидите те же данные, что и ранее, однако в этот раз они поступают динамически.

Использование параметров URL

На данный момент URL-адреса наших конечных точек представляют из себя статические пути – будь то / или /users , но что если нам необходимо получить данные только о конкретном пользователе. Нам необходимо будет использовать изменчивый URL-адрес конечной точки.

Что касается наших пользователей, то возможно, что мы бы хотели получать информацию о каждом из них на основании их уникального id. Для этого мы бы воспользовались двоеточием ( : ) для указания того, что это параметр маршрута.

Мы может получить значение этого параметра при помощи свойства request.params . Поскольку наше свойство называется id , мы получим его следующим образом:

Теперь мы добавим условие WHERE к нашему запросу SELECT для того, чтобы получать только результаты с указанным id .

Мы воспользуемся ? в качестве заполнителя для предотвращения атаки в виде внедрения кода SQL и передадим id в качестве параметра, а не будем создавать строку при помощи конкатенации, что было бы менее безопасно.

Полный код ресурса для получения индивидуального пользователя теперь выглядит следующим образом:

При переходе по этому URL-адресу будет возвращен единственный результат.

Если это так, то мои поздравления: вы успешно создали динамический параметр маршрута!

Отправление запроса по методу POST

Пока что все, что мы выполняли, опосредовалось запросами по методу GET . Эти запросы безопасны, то есть они не меняют состояние сервера. Мы просто просматривали данные в формате JSON.

Теперь мы начнем преобразовывать наш API в динамический за счет использования запроса по методу POST для добавления новых данных.

Я упомянула ранее, в Understanding REST, что не стоит использовать глаголы вроде add или delete в URL для выполнения действий. Для того чтобы добавить нового пользователя в базу данных, мы будем выполнять POST -запрос по тому же URL, который использовали для их просмотра, однако просто установим для него отдельный маршрут.

Обратите внимание, что мы теперь используем app.post() вместо app.get() .

Поскольку мы создаем, а не считываем, то воспользуемся здесь запросом INSERT , подобно тому, как мы делали при инициализации базы данных. Мы отправим все request.body в запросе SQL.

Также мы укажем в качестве значения статуса ответа 201 , что означает Created . Для того чтобы получить id последнего добавленного пользователя, мы воспользуемся свойством insertId .

Код для маршрута, который принимает запросы по методу POST , будет выглядеть следующим образом:

Мы выполним команду curl -d , разместив после нее строку запроса со всеми парами ключ=значение и запрашиваемую конечную точку.

Сразу после отправления этого запроса вы должны получить ответ от сервера.

Отправление запроса по методу PUT

Запрос по методу POST полезен для добавления нового пользователя, однако нам понадобится запрос по методу PUT для изменения данных существующего пользователя. PUT – идемпотентный метод. Это означает, что при повторном выполнении запроса будет получаться тот же самый результат. Запросы по этому методу отличаются от тех, что выполняются по методу POST , поскольку при отправлении запроса для добавление нового пользователя более одного раза, будут продолжаться создаваться новые пользователи.

Что касается нашего API, то мы настроим маршрут, принимающий запросы по методу PUT , таким образом, что при помощи него можно будет отредактировать отдельного пользователя, так что мы воспользуемся параметром маршрута :id в этот раз.

Давайте создадим запрос UPDATE и убедимся при помощи условия WHERE , что он применяется только к запрошенному id. Мы используем два заполнителя ? , и передаваемые нами значения будут добавляться последовательно.

Перезапустите сервер перед отправлением запроса, иначе вы получите ошибку Cannot PUT /users/2 .

Вы должны будете увидеть следующее:

Данные пользователя со значением id, равным 2 , теперь должны быть обновлены.

Отправление запроса по методу DELETE

Наша последняя задача для завершения реализации функциональных возможностей CRUD нашего API – добавление опции для удаления пользователя из базы. В этом запросе будет использоваться запрос SQL DELETE с условием WHERE , и благодаря нему будет удален индивидуальный пользователь, указанный при помощи параметра маршрута.

Мы можем использовать -x снова для отправления запроса на удаление данных. Давайте удалим последнего пользователя, которого создали.

Вы увидите уведомление об успешном завершении операции.

Отправление запросов при помощи модуля request

Отправление запросов при помощи веб-формы

Создайте index.html и добавьте туда следующий код:

Откройте этот статический HTML-файл в вашем браузере, заполните форму и отправьте ее, не отключая сервер. Вы должны будете увидеть в качестве ответа User added with ID: 4 , а также новый список пользователей.

Инструкция по работе с Oracle Database XE в среде node.js

Требования к программному обеспечению

  1. node.js v7+
  2. npm v3+
  3. Oracle Database 11g XE

Данный гайд ориентирован на работу в среде Unix (в частности, ОС Ubuntu).

Устанавливаем node и npm

Проверка корректности установки node и npm

Команды, приведённые ниже, должны вывести версии установленных пакетов.

Здесь $PROJECT_ROOT - адрес корневой директории для проекта.

Ниже приведёт пример инициализации проекта в домашней директории ОС Unix:

Для простоты будем считать, что весь javascript-код, приведённый ниже, находится в файле index.js .

Для запуска приложения будет использоваться следующая команда:

Устанавливаем драйвер базы данных (версия 1.11.0)

Подключение к Oracle DB

Функция подключения к базе данных и выполнения запроса (Promise-based):

Использование промисов позволит в дальнейшем использовать синтаксис async/await для выполнения запросов. Однако, официальный драйвер предоставляет не только Promise-based интерфейс, но и callback-based.

Описанная выше функция принимает параметры statement и params . Параметр statement - PL/SQL-запрос, а params - параметры, которые необходимо передать в запрос (об этом ниже).

Метод getConnection на объекте oracledb принимает в качестве параметра объект с конфигурациями подключения (имя пользователя, пароль и адрес для подключения к базе данных). Сами параметры лучше хранить в переменных среды (например, использовать пакет dotenv) и потом получать доступ к ним через process.env.$PARAM_NAME , как показано в коде выше.

Пример параметра connectString для Oracle DB XE, установленной локально со всеми параметрами по умолчанию: localhost/XE .

Вызов oracledb.getConnection вернёт промис, в который будет передан объект connection . Объект connection позволяет выполнять запросы непосредственно к базе данных (метод connection.execute ). После выполнения необходимых операций с базой данных, соединение connection нужно освобождать, используя метод connection.release() .

Примеры выполнения запросов

Допустим, мы хотим выполнить вызов хранимой процедуры, которая в базе данных была объявлена следующим образом:

Для этого напишем простую функцию, которая будет принимать параметры, необходимые для вызова процедуры ( user_id , book_id , books_count ), а возвращать будет массив, состоящий из двух элементов: первый элемент - строка с запросом, второй элемент - массив параметров. Тут мы используем массив, потому что далее будет удобно пользоватья spread-оператором при вызове executePLSQL .

Имена параметров в строке запроса не имеют значения, важен только их порядок, который должен совпадать с порядком значений в массиве параметров.

Использовать нашу функцию можно будет следующим образом:

Внутри фукцнии, объявленной как async :

Используя .then на объекте промиса, возвращаемого функцией executePLSQL :

Ниже представлен пример выполнения хранимой в бд функции, которая возвращает значение.

Пример кода функции в бд:

В случае, когда нам нужно получить значение, возвращаемое хранимой в бд функцией, connection.execute вторым параметром будет принимать объект специального вида, а не массив, как раньше. Объект должен будет содержать поля, обозначающие тип возвращаемого значения, его размер и направление (н-р, BIND_OUT).

Для этого напишем вспомогательную функцию, которая будет принимать массив наших параметров для запроса и тип возвращаемого значения, а возвращать будет объект нужного вида. zipObject - функция из пакета lodash.

Теперь напишем вспомогательную функцию getBooksCSVbyPublisher по типу ранее описанной buyBook :

Примеры использования представлены ниже.

Внутри async функции:

Выше были описаны базовые примеры использования драйвера node-oracledb. Для более продвинутых вариантов использования стоит обращаться к официальной документации.

Привет, Хабр! представляю вашему вниманию перевод статьи «Creating a REST API: Web Server Basics».

Часть 1. Создание REST API: основы веб-сервера

Веб-сервер является одним из наиболее важных компонентов REST API. В этом посте вы начнете свой проект API REST, создав несколько начальных каталогов и файлов. Затем вы создадите модуль веб-сервера и подключите его так, чтобы веб-сервер запускался и правильно выключался.

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


Файл index.js можно рассматривать как «основной» файл в приложении. Он будет точкой входа в приложение. Мы будем добавлять код в этот файл и файлы web-server.js в каталогах config и services.

Вставьте следующий код в файл Home > hr_app > config>web-server.js

Вставьте следующий код в файл Home > hr_app > services>web-server.js

Строки 7-27: объявлена функция с именем initialize. Функция немедленно возвращает promise, которое разрешается или отклоняется в зависимости от того, успешно ли запущен веб-сервер.

Строки 12-14: метод get приложения используется для добавления обработчика для запросов GET, которые приходят по корневому пути (/). Функция обратного будет вызываться при получении такого запроса, и она будет использовать параметр «res» (res) для отправки ответа «Hello World!» Клиенту.

Строки 16-24: метод прослушивания сервера используется для привязки к указанному порту и запуска прослушивания входящих запросов.

Строка 28: экспорт модуля чтоб можно было использовать извне

Вставьте следующий код в файл Home > hr_app > index.js


Подключаем модуль веб-сервера, а затем он определяет и вызывает асинхронную функцию startup. Поскольку функция initialize веб-сервера возвращает promise, вы можете использовать его с async / await и обернуть его в блок try-catch. Если функция initialize завершается успешно, веб-сервер будет работать; в противном случае любые исключения будут перехвачены и обработаны. Все, что вам нужно сделать сейчас, это инициализировать npm и установить Express — тогда вы можете запустить приложение. Выполните следующие команды в терминале из каталога hr_app.


Команда npm init используется для создания файла package.json, который npm использует как manifest файл (флаг -y принимает параметры по умолчанию). Команда npm install используется для установки express (флаг -s добавляет express в список зависимостей в package.json). Npm хранит установленные вами модули в каталоге node_modules. Он также создает файл с именем package.lock.json, чтобы обеспечить идентичное дерево для команды разработчиков.

И вот он, еще один «Hello World». Хотя это и не особенно увлекательно, это важный первый шаг для вашего API.

Когда будете готовы, можете выключить сервер, вернувшись к терминалу и нажав ctrl + c.

image

Контролируемый shutdown

Во время выключения нажатием Ctrl + C у вас нет контроля над тем, как это произошло. Чтобы контролировать процесс завершения работы, вам необходимо явно закрыть веб-сервер и выйти из процесса Node.js.

Вставьте следующий код в файл Home > hr_app >services>web-server.js

Вставьте следующий код в файл Home > hr_app > index.js

Проблема мэра в том, что npm install oracle //pr db-oracle выходит из строя из-за

Я попытался клонировать код и выполнить локальную установку, а затем скопировать весь модуль под мой проект, установить wen хорошо, но когда я помещаю модуль под мой проект, я сталкиваюсь с этой ошибкой

Я следовал процедуре установки обоих драйверов и устанавливал переменные , подобные этой (/var/environment)

Я использовал ubuntu 12.04, а версия узла-v0.10.18 вот мой пример тестового файла nodejs:

4 ответа

Так что люди, вероятно, скажут мне, что это плохая идея, но я хотел бы, по крайней мере, попробовать. Цель этого приложения состоит в том, что оно может работать только тогда, когда устройство является частью той же сети, что и oracle db, или подключено к сети через VPN. Информация в базе данных.

Мне нужно иметь доступ к рабочему листу SQL в 11g для моей курсовой работы. В университете у меня есть доступ к серверу Oracle, но я хочу сделать это на своем ноутбуке, и у меня нет возможности подключиться к этому серверу Oracle. Как я могу получить подключение к базе данных, чтобы получить.

Я знаю, что это старый пост. просто хотел упомянуть верный способ для nodejs общаться с oracle без дополнительных модулей.

Проще всего включить шлюз epg:

Также вы можете настроить modplsq:

или слушатель Apex:

В зависимости от approach. secure oracle, чтобы он отвечал только на IP-адрес сервера nodejs. Так что, если работать на localhost:

Также блокируйте вызовы всех других пакетов и процедур. Есть несколько способов сделать это в зависимости от выбранного вами пути.

Убедитесь, что вы делаете это как минимум:

  • создайте белый список элементов, которые можно вызвать из Интернета
  • требуйте, чтобы все URL-адреса содержали имя схемы, например: myuser.myprocedure
  • убедитесь, что первая часть url (до пути запроса) содержит только a-z 0-9
  • действительно хороший белый список позаботится о большинстве этих пунктов

Там вам не нужно беспокоиться, если модуль сломается или перестанет работать со следующим выпуском.

AND. you может легко связываться с Oracle для использования узла:

Вы получили Мгновенный клиент, как описано здесь ? Если я правильно читаю, вам нужны пакеты Basic (или Basic Lite) и SDK Instant Client. В пакете SDK может быть файл заголовка, с которым у вас возникли проблемы.

Примечание: по моему опыту, вам не всегда нужно добавлять Instant Client в PATH ; обычно вы можете просто убедиться, что ваш исполняемый файл может найти его (что часто означает просто удаление его в тот же каталог).

Установите путь к клиенту oracle в командной строке, как показано ниже, перед запуском приложения узла

У меня была вышеописанная проблема , это решило мою проблему, и теперь я могу подключиться к oracle .

Но одна проблема, с которой я все еще сталкиваюсь, - это выполнение инструкции select. Он всегда возвращает ошибку. Я могу выполнять SP, создавать операторы и все остальное без ошибок . Я застрял здесь и немного разочарован .

Не удалось подключить сервер MySql из приложения Nodejs Окружающая среда: MySql сервер установлен в windows - 7. Oracle виртуальная коробка установлена в Windows - 7 Виртуальное поле Oracle содержит приложение nodejs и связанные с ним пакеты. Примечание: виртуальный ящик не имеет сервера MySql. Я.

Насколько я понимаю, Set PATH помещает строку, указанную вами в начале переменной среды Path. В начале я ввел путь к папке мгновенного клиента.

Он исправил ошибку привязки oracle, но запросы не работали. Затем я добавил путь к папке vc11 BEFORE путь к мгновенному клиенту, так что это выглядит следующим образом :

Теперь мои запросы работают!

Похожие вопросы:

я использую соединитель node-oracleDB для подключения к моей локальной базе данных , и я хочу спросить, был ли это другой(оптимальный) способ подключения к базе данных, чтобы улучшить.

В моем скрипте ruby я установил подключение к oracle db через: conn = OCI8.new(username, password, database) Он хорошо работает на моем собственном рабочем столе (Ubuntu), однако, когда я.

Я использую Perl DBI &, пытаясь подключиться к Oracle 12c. Я получаю ошибку: DBI подключение('host=serverip;sid=comms;port=1521','comms'. ) не удалось: ORA-28040: нет соответствующего.

Так что люди, вероятно, скажут мне, что это плохая идея, но я хотел бы, по крайней мере, попробовать. Цель этого приложения состоит в том, что оно может работать только тогда, когда устройство.

Мне нужно иметь доступ к рабочему листу SQL в 11g для моей курсовой работы. В университете у меня есть доступ к серверу Oracle, но я хочу сделать это на своем ноутбуке, и у меня нет возможности.

Не удалось подключить сервер MySql из приложения Nodejs Окружающая среда: MySql сервер установлен в windows - 7. Oracle виртуальная коробка установлена в Windows - 7 Виртуальное поле Oracle содержит.

Я пытаюсь соединить oracle с NodeJS. Шаги следовали, как показано ниже. Предварительные условия клиент не установлен, кроме NodeJS(0.10.25) и npm(1.3.24). В моем проекте ExpressJS: npm установка.

я хочу подключить базу данных oracle 11gR2 к node.js , когда я хочу установить пакет db-oracle, произошла ошибка : npm install db-oracle sh: node-wf command not found что я делаю ?

Я пытаюсь сделать простое подключение к базе данных Oracle через пакет DBI и ROracle, следуя инструкциям от R до Oracle подключения к базе данных: используйте ROracle как для производительности, так.

Читайте также: