Решение состоит в том, чтобы добровольно поставить ошибку в запросе и напечатать сообщение об ошибке:
//Connection to the database
$co = new PDO('mysql:dbname=myDB;host=localhost','root','');
//We allow to print the errors whenever there is one
$co->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//We create our prepared statement
$stmt = $co->prepare("ELECT * FROM Person WHERE age=:age"); //I removed the 'S' of 'SELECT'
$stmt->bindValue(':age','18',PDO::PARAM_STR);
try {
$stmt->execute();
} catch (PDOException $e) {
echo $e->getMessage();
}
Стандартный вывод:
SQLSTATE [42000]: Синтаксис ошибка или нарушение доступа: [...] рядом с «ELECT * FROM Person WHERE age = 18» в строке 1
blockquote>Важно отметить, что он печатает только первые 80 символов запрос.
Во внешнем интерфейсе вы захотите настроить конфигурацию axios, которая будет указывать на правильный URL-адрес в зависимости от рабочей среды:
utils / axiosConfig.js (Мне нравится использовать имя app
, чтобы оно соответствовало express
, но вы можете назвать его как угодно)
import axios from 'axios';
const env = process.env.NODE_ENV; // current environment
export const app = axios.create({
baseURL:
env === 'production'
? 'http://example.com/api/' // production
: 'http://localhost:5000/api/', // development
});
Затем вы можете использовать эту конфигурацию везде, где вы делаете вызов API:
import { app } from '../utils/axiosConfig.js';
app.get("example");
app.post("example");
...etc
Теперь он может отправлять запросы на http://localhost:5000/api/example
или http://example.com/api/example
.
В вашем client
package.json вы можете указать среду:
"scripts": {
"start": "NODE_ENV=development webpack-dev-server",
"build": "NODE_ENV=production webpack",
"stage": "NODE_ENV=staging webpack",
"test": "NODE_ENV=testing jest --watchAll --coverage",
},
Да, вам придется развернуть свой сервис на хостинге (уже создан). Есть несколько решений, которые вы можете посмотреть, есть Digital Ocean Посмотрите на эти несколько ссылок
, как настроить приложение nodejs для prod
[111 ] как установить mongodb на ubuntu
Также есть Heroku. для этого есть полное руководство для этого здесь
подготовка и развертывание стека Mern .
Как я уже сказал, есть и несколько других решений. Надеюсь, это поможет
В настоящее время все вызовы API используют сообщение axios post для http: // localhost: 4000 / , что, как я предполагаю, также не будет работать на сервере.
blockquote>Вы правы, это не сработает. Это потому, что если пользователи получат ваше приложение React , все вызовы API будут перенаправлены на их
localhost
. Который не поддерживает ваш APIКогда я пытаюсь запустить его из службы хостинга так же, как я делал ранее, он говорит, что не может подключиться к базе данных, что Я полагаю, это связано с тем, что на моей машине соединение не открыто.
blockquote>Это, вероятно, потому что URL MongoDB, вероятно, все еще имеет значение, похожее на
'mongodb://localhost:27017/myapp
. Здесь есть 2 основных варианта.
- Воспользуйтесь «услугой размещения базы данных» , например MongoDB Atlas , затем вам потребуется изменить URL-адрес вашей базы данных, чтобы он указывал на предоставленный службой
- Разместите базу данных на своем сервере , которая будет работать с
localhost
URLЯ искал в Интернете информацию о развертывание стека MERN, но все, что я нашел, обсуждают его с точки зрения хостинга на AWS EC2, а это не то, чем я буду заниматься.
blockquote>[119 ] Редактировать
- Любой сервер, на котором у вас есть контроль и гибкость , будет работать в этом сценарии. Вы можете разместить все свои вещи (сервер, интерфейс и базу данных) на нем, если хотите. EC2 может делать все это , но это не единственный вариант. Вы также можете проверить аналогичные продукты от Microsoft и Google, и т.д ...
- Другим способом является развертывание каждого артефакта отдельно , который является более масштабируемым, но также имеет свою сложность. Если вы идете таким образом, вы можете рассмотреть Docker контейнеры и Kubernetes , которые полезны для организации распределенных систем
Поскольку вы используете MongoDB Atlas, убедитесь, что вы занесли в белый список IP-адрес вашего сервера