Reactjs 未捕获缺少必需选项:云名称
不确定缺少的clous名称是否为REACT\u APP\u CLOUDINARY\u CLOUD\u name,但我的.env文件中存储了我的REACT\u APP\u CLOUDINARY\u API、REACT\u APP\u CLOUDINARY\u name和REACT\u APP\u CLOUDINARY\u UPLOAD\u SECRET。我还使用一行console.log(process.env)在服务器中记录了process.env;我无法从服务器中提取任何内容,因为我收到了一个错误throw err;。我还有另一台服务器,我不确定这是否是端口问题 环境署署长 完全错误是:Reactjs 未捕获缺少必需选项:云名称,reactjs,npm,cloudinary,npm-start,Reactjs,Npm,Cloudinary,Npm Start,不确定缺少的clous名称是否为REACT\u APP\u CLOUDINARY\u CLOUD\u name,但我的.env文件中存储了我的REACT\u APP\u CLOUDINARY\u API、REACT\u APP\u CLOUDINARY\u name和REACT\u APP\u CLOUDINARY\u UPLOAD\u SECRET。我还使用一行console.log(process.env)在服务器中记录了process.env;我无法从服务器中提取任何内容,因为我收到了一个
(anonymous) @ all.js:1
v @ all.js:1
s @ all.js:1
window.cloudinary.openUploadWidget @ all.js:1
uploadWidget @ UploadMusic.js:114
onClick @ UploadMusic.js:147
UploadMusic.js
const UploadMusic = () => {
const [date, setSelectedDate] = useState(null);
const [values, setValues] = useState({
name: "",
artist: "",
label: "",
email: "",
message: "",
songTitle: "",
phone: "",
genre: "",
date: "",
uploadedFiles: [],
buttonText: "Submit",
uploadPhotosButtonText: "Upload audio files",
});
// destructure state variables
const {
name,
artist,
songTitle,
label,
email,
message,
phone,
genre,
uploadedFiles,
buttonText,
uploadPhotosButtonText,
} = values;
// destructure env variables
const {
REACT_APP_API,
REACT_APP_CLOUDINARY_CLOUD_NAME,
REACT_APP_CLOUDINARY_UPLOAD_SECRET,
} = process.env;
console.log(date);
// event handler
const handleChange = (name) => (event) => {
setValues({ ...values, [name]: event.target.value });
};
const handleSubmit = (event) => {
event.preventDefault();
setValues({ ...values, buttonText: "...sending" });
// send to backend for email
console.table({
name,
email,
phone,
message,
uploadedFiles,
genre,
date,
label,
});
axios({
method: "POST",
url: `${REACT_APP_API}/feedback`,
data: {
name,
artist,
songTitle,
label,
email,
date,
genre,
phone,
message,
uploadedFiles,
},
})
.then((response) => {
// console.log('feedback submit response', response);
if (response.data.success) toast.success("Thanks for your feedback");
setValues({
...values,
name: "",
artist: "",
songTitle: "",
label: "",
phone: "",
email: "",
genre: "",
date: "",
message: "",
uploadedFiles: [],
buttonText: "Submitted",
uploadPhotosButtonText: "Uploaded",
});
})
.catch((error) => {
// console.log('feedback submit error', error.response);
if (error.response.data.error) toast.error("Failed! Try again!");
});
};
// function onChangeInput(value) {
// console.log(value);
// }
const uploadWidget = () => {
window.cloudinary.openUploadWidget(
{
cloud_name: REACT_APP_CLOUDINARY_CLOUD_NAME,
upload_preset: REACT_APP_CLOUDINARY_UPLOAD_SECRET,
tags: ["ebooks"],
},
function (error, result) {
// console.log(result);
setValues({
...values,
uploadedFiles: result,
uploadPhotosButtonText: `${
result ? result.length : 0
} Photos uploaded`,
// Added to include Audio Tracks
height: 200,
width: 500,
flags: "waveform",
resource_type: "video",
});
}
);
};
React(主要是?)是一种客户端语言—您如何持久化配置值以便React代码可以使用它们?.env文件是在服务器端环境中设置配置值的常用方法,但我不知道这些值将如何进入您的React应用程序?我也上传了cors包,但不确定这个问题是从哪里来的?您如何持久化Cloudinary配置值,以便React代码可以使用它们?
(anonymous) @ all.js:1
v @ all.js:1
s @ all.js:1
window.cloudinary.openUploadWidget @ all.js:1
uploadWidget @ UploadMusic.js:114
onClick @ UploadMusic.js:147
UploadMusic.js
const UploadMusic = () => {
const [date, setSelectedDate] = useState(null);
const [values, setValues] = useState({
name: "",
artist: "",
label: "",
email: "",
message: "",
songTitle: "",
phone: "",
genre: "",
date: "",
uploadedFiles: [],
buttonText: "Submit",
uploadPhotosButtonText: "Upload audio files",
});
// destructure state variables
const {
name,
artist,
songTitle,
label,
email,
message,
phone,
genre,
uploadedFiles,
buttonText,
uploadPhotosButtonText,
} = values;
// destructure env variables
const {
REACT_APP_API,
REACT_APP_CLOUDINARY_CLOUD_NAME,
REACT_APP_CLOUDINARY_UPLOAD_SECRET,
} = process.env;
console.log(date);
// event handler
const handleChange = (name) => (event) => {
setValues({ ...values, [name]: event.target.value });
};
const handleSubmit = (event) => {
event.preventDefault();
setValues({ ...values, buttonText: "...sending" });
// send to backend for email
console.table({
name,
email,
phone,
message,
uploadedFiles,
genre,
date,
label,
});
axios({
method: "POST",
url: `${REACT_APP_API}/feedback`,
data: {
name,
artist,
songTitle,
label,
email,
date,
genre,
phone,
message,
uploadedFiles,
},
})
.then((response) => {
// console.log('feedback submit response', response);
if (response.data.success) toast.success("Thanks for your feedback");
setValues({
...values,
name: "",
artist: "",
songTitle: "",
label: "",
phone: "",
email: "",
genre: "",
date: "",
message: "",
uploadedFiles: [],
buttonText: "Submitted",
uploadPhotosButtonText: "Uploaded",
});
})
.catch((error) => {
// console.log('feedback submit error', error.response);
if (error.response.data.error) toast.error("Failed! Try again!");
});
};
// function onChangeInput(value) {
// console.log(value);
// }
const uploadWidget = () => {
window.cloudinary.openUploadWidget(
{
cloud_name: REACT_APP_CLOUDINARY_CLOUD_NAME,
upload_preset: REACT_APP_CLOUDINARY_UPLOAD_SECRET,
tags: ["ebooks"],
},
function (error, result) {
// console.log(result);
setValues({
...values,
uploadedFiles: result,
uploadPhotosButtonText: `${
result ? result.length : 0
} Photos uploaded`,
// Added to include Audio Tracks
height: 200,
width: 500,
flags: "waveform",
resource_type: "video",
});
}
);
};