Есть ли способ, которым я могу передать результат маршрута как поле в другом маршруте? - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь загрузить изображение с multer в cloudinary, а затем сохранить полученный URL-адрес в столбце базы данных. У меня есть следующий код:

Облачный конфигурационный файл:

import { config, uploader } from 'cloudinary'
import dotenv from 'dotenv';
dotenv.config();
const cloudinaryConfig = (req, res, next) => {
config({
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
api_key: process.env.CLOUDINARY_API_KEY,
api_secret: process.env.CLOUDINARY_API_SECRET,
});
next();
}
export { cloudinaryConfig, uploader };

Файл конфигурации multer:

import multer from 'multer';
import Datauri from 'datauri';
import path from 'path';
const storage = multer.memoryStorage();
const multerUploads = multer({ storage }).single('image');
const dUri = new Datauri();

/**
* @description This function converts the buffer to data url
* @param {Object} req containing the field object
* @returns {String} The data url from the string buffer
*/

const dataUri = req => dUri.format(path.extname(req.file.originalname).toString(), req.file.buffer);
export { multerUploads, dataUri };

Файл точек входа (app.js)

import express from 'express';
import { urlencoded, json } from 'body-parser';
import { resolve } from  'path';
import { uploader, cloudinaryConfig } from './config/cloudinaryConfig'
import { multerUploads, dataUri } from './middlewares/multerUpload';
const app = express();
const Port = process.env.PORT || 3000;
app.use(express.static(resolve(__dirname, 'src/public')));
app.use(urlencoded({ extended: false }));
app.use(json());
app.use('*', cloudinaryConfig);

**app.post('/upload', multerUploads, (req, res) => {**
if(req.file) {
const file = dataUri(req).content;
return uploader.upload(file).then((result) => {
const image = result.url;
return res.status(200).json({
messge: 'Your image has been uploaded successfully to cloudinary',
data: {
image
}
})
}).catch((err) => res.status(400).json({
messge: 'something went wrong while processing your request',
data: {
err
}
}))
}
});
app.listen(Port, () => console.log(`Server started at http://localhost:${Port}`));

Я пытался разделить функции и вызывать их в маршрутах приложения, но файл req.file не был определен, в то время как для другого сценария URL-адрес не был создан, и не было выдано никакой ошибки. Я также посмотрел экспресс-документацию, чтобы узнать, могу ли я сохранить результат маршрута в переменной, но я не видел ничего подобного написанному.

carRouter.post('/car', verifyToken, postAdchecker, cloudinaryConfig, multerUploads, postCarAd);

Я хочу, чтобы результат маршрута загрузки , который является сгенерированным URL, был передан в другой маршрут (postCarAd) в качестве поля (imageurl). Как мне это сделать?

...