javascript - 有没有办法可以将路线的结果作为另一条路线中的字段传递?
问题描述
我正在尝试将带有 multer 的图像上传到 cloudinary,然后将生成的 url 存储在数据库列中。我有以下代码:
cloudinary 配置文件:
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,也没有引发错误。我还查看了 express 文档,看看我是否可以将路由的结果存储在变量中,但我没有看到任何类似这样写的东西。
carRouter.post('/car', verifyToken, postAdchecker, cloudinaryConfig, multerUploads, postCarAd);
我希望上传路由的结果,即生成的 url作为字段(imageurl)传递到另一个路由( postCarAd)。我该如何做到这一点?
解决方案
推荐阅读
- sql - SQL中有没有办法通过自反属性组合对?
- oracle - 索引的重叠
- angular - AOT(Angular)中预编译是什么意思
- python - 如何连续运行可以从节点接收命令的 Python 脚本
- kubernetes - 什么是入口控制器,如何创建它?
- apache - 在 Apache 服务器中使用 vue js SPA 刷新页面时如何修复“未找到”?
- css - Nexus 7 和像素 2 的媒体查询是什么?
- javafx - 将 Windows 更新到 1903(2019 年 5 月)后 JavaFX 无法创建阶段
- python - 为什么在单击“开始”按钮后主循环(此代码中的“运行”)没有响应?
- php - 强制在 PHP 中将数组添加到 JSON 的单个元素中