Настройка серверной части

В Части 1 мы узнали, как настроить интерфейс для загрузки изображений. Теперь мы можем приступить к настройке нашей серверной части. Перейдите в основной каталог вашего приложения и введите в терминал следующую команду:

mkdir back-end && cd back-end

Находясь в серверной папке, введите команду npm init и заполните соответствующие поля. Когда вы дойдете до раздела точки входа, убедитесь, что вы ввели server.js. Это файл, который мы будем использовать в качестве точки доступа к нашему внутреннему серверу. Вы можете назвать его как хотите.

Поскольку это приложение MERN, мы будем использовать MongoDB в качестве нашей базы данных. Если вы еще не создали учетную запись, перейдите на www.mlab.com и создайте бесплатную учетную запись. Выберите Песочница (которая бесплатна) в качестве типа плана. Затем выберите Amazon Web Services в качестве поставщика и выберите соответствующий регион. В качестве альтернативы, я считаю, что если вы ранее не регистрировали учетную запись mlab, теперь вы можете использовать https://www.mongodb.com/cloud/atlas. Это почти то же самое, поэтому выполните те же действия.

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

npm install cloudinary multer express dotenv mongoose body-parser nodemon --save

Во-первых, давайте добавим в наш package.json следующий код для настройки nodemon. Добавьте это в раздел «Сценарии».

“start”: “node server.js”,
“dev”: “nodemon server.js”

Теперь сохраните этот файл.

Nodemon - это пакет, который упрощает работу сервера. Каждый раз, когда мы сохраняем файл, сервер перезагружается без необходимости вручную перезагружать сервер, нажав «CTRL + C».

Теперь настроим наш server.js файл. Убедитесь, что вы находитесь в своей внутренней папке, и создайте server.js файл. Включите в свой server.js файл следующий код:

Теперь давайте подключим базу данных внутри вашей внутренней папки. Создайте .env файл. Это файл переменных среды, который используется для хранения нашей конфиденциальной информации. Здесь мы собираемся сохранить наш URL-адрес MongoDB. Также важно отметить, что вы должны удалить ‹› из dbuser и dbpassword, иначе он не будет подключаться при вводе ваших собственных учетных данных. Вам также необходимо создать пользователя для базы данных, который не является именем пользователя, которое вы использовали для входа в атлас mlab или MongoDB.

MONGODB = mongodb://<dbuser>:<dbpassword>@ds217438.mlab.com:17438/cloudinary-example

Модели

Давайте быстро добавим нашу модель мангуста. В этом примере нам нужны только три поля: Title, Image и ImageID. У них будет тип строка. ImageID и поле Image будут автоматически заполнены Cloudinary, как вы увидите, когда мы настроим наш маршрут Post. Не забудьте также включить свою модель в файл server.js, чтобы мы могли позже получить доступ к модели в маршруте публикации. Вот как выглядит мой файл модели:

Настройка Multer и Cloudinary

Теперь мы можем продолжить и настроить установленную нами библиотеку Multer и Cloudinary. Сначала давайте добавим наш ключ Cloudinary API и секрет API в наш .env файл. Теперь ваш .env файл должен выглядеть так.

MONGODB = mongodb://<dbuser>:<dbpassword>@ds217438.mlab.com:17438/cloudinary-example
CLOUDINARY_API_KEY = YOUR API KEY
CLOUDINARY_API_SECRET = YOUR API SECRET

Теперь добавьте следующий код в наш server.js файл для Multer и Cloudinary. По соглашению переменные также находятся в верхней части файла.

//IMAGE UPLOAD CONFIGURATION
const multer = require(“multer”);
const storage = multer.diskStorage({
filename: function(req, file, callback) {
callback(null, Date.now() + file.originalname);
}
});
const imageFilter = function(req, file, cb) {
// accept image files only
if (!file.originalname.match(/\.(jpg|jpeg|png|gif)$/i)) {
return cb(new Error(“Only image files are accepted!”), false);
}
cb(null, true);
};
const upload = multer({ storage: storage, fileFilter: imageFilter });
const cloudinary = require(“cloudinary”);
cloudinary.config({
cloud_name: “lthomas92”, //ENTER YOUR CLOUDINARY NAME
api_key: process.env.CLOUDINARY_API_KEY, // THIS IS COMING FROM CLOUDINARY WHICH WE SAVED FROM EARLIER
api_secret: process.env.CLOUDINARY_API_SECRET // ALSO COMING FROM CLOUDINARY WHICH WE SAVED EARLIER
});

Маршруты

Давайте закончим с нашим server.js файлом и продолжим добавлять маршруты. В более крупном приложении мы обычно разбиваем его на папку маршрутов и сохраняем там наши различные маршруты. Мы также могли бы использовать экспресс-маршрутизатор в этих файлах. Но, поскольку мы сохраняем простоту, мы можем хранить наши маршруты в файле server.js. Начнем с маршрута Post.

Я считаю, что наиболее сложной частью этого маршрута является понимание того, почему иногда req.file.path может возвращать ошибку типа «путь не определен», из-за чего я много раз вырывал себе волосы. Обычно это вызвано двумя причинами. Во-первых, upload.single должен совпадать с тем, как вы называете ввод в форме на стороне клиента. В противном случае будет возвращена ошибка. Кроме того, очень часто легко забыть encType=multipart/form-data в React или enctype=multipart/form-data в HTML. Это должно быть указано как свойство в вашей форме, иначе вы не сможете отправить изображение. BodyParser заботится о вводе текста за нас, но не может обрабатывать изображения, поэтому нам нужно использовать Cloudinary и Multer.

Изображение в Image.create использует модель Мангуста, которую мы создали ранее. Он создает объект в нашей базе данных MongoDB, который будет хранить значения для Title, Image и ImageID. Кроме того, MongoDB автоматически присвоит нам уникальный идентификатор.

Следующий маршрут довольно простой. Это будет просто маршрут GET.

Теперь мы закончили с нашей серверной частью. Проверьте код full server.js на GitHub, чтобы убедиться, что у вас нет ошибок.

Заполненная заявка

Вот наша заполненная заявка!

Спасибо за прочтение! Надеюсь, этот урок был вам полезен. Если у вас есть вопросы, оставьте, пожалуйста, комментарий. Я постараюсь помочь!

Найдите код на GitHub здесь