部署MERN应用至cPanel遇CORS问题:MongoDB引入即触发故障
本地开发环境运行正常,但部署到cPanel后出现CORS错误。尝试过切换mongoose到MongoDB、手动配置CORS、逐行排查代码,最终发现仅引入MongoDB相关模块(未实例化使用)就会触发CORS错误。
无法运行的代码
const express = require('express'); const app = express(); const cors = require("cors"); const { MongoClient, ServerApiVersion } = require('mongodb'); const uri = "mongo url"; // const client = new MongoClient(uri, { // serverApi: { // version: ServerApiVersion.v1, // strict: true, // deprecationErrors: true, // } // }); app.use((req, res, next) => { res.header("Access-Control-Allow-Origin", "*") res.header( "Access-Control-Allow-Headers", "Origin, X-Requested, Content-Type, Accept Authorization" ) if (req.method === "OPTIONS") { res.header( "Access-Control-Allow-Methods", "POST, PUT, PATCH, GET, DELETE" ) return res.status(200).json({}) } next() }) app.use(cors()); app.get("/", (req, res) => { res.json({ name: "Code Bless You", Subscribe: true, }); }); app.listen(5200, () => console.log("Server is running on port 5200"));
移除MongoDB模块后可正常运行的代码
const express = require('express'); const app = express(); const cors = require("cors"); // const { MongoClient, ServerApiVersion } = require('mongodb'); const uri = "mongo url"; // const client = new MongoClient(uri, { // serverApi: { // version: ServerApiVersion.v1, // strict: true, // deprecationErrors: true, // } // }); app.use((req, res, next) => { res.header("Access-Control-Allow-Origin", "*") res.header( "Access-Control-Allow-Headers", "Origin, X-Requested, Content-Type, Accept Authorization" ) if (req.method === "OPTIONS") { res.header( "Access-Control-Allow-Methods", "POST, PUT, PATCH, GET, DELETE" ) return res.status(200).json({}) } next() }) app.use(cors()); app.get("/", (req, res) => { res.json({ name: "Code Bless You", Subscribe: true, }); }); app.listen(5200, () => console.log("Server is running on port 5200"));
前端Axios请求代码(App.jsx)
const [responseData, setResponseData] = useState(null); const handleCorsTest = async () => { try { const response = await axios.get('https://api.siperjaka.cloud'); setResponseData(response.data); console.log(response.data); } catch (error) { console.error('CORS Test Error:', error); } }; <button onClick={handleCorsTest}>Test CORS</button>
收到的错误信息
[Error] Origin https://siperjaka.cloud is not allowed by Access-Control-Allow-Origin. Status code: 500
[Error] XMLHttpRequest cannot load https://api.siperjaka.cloud/ due to access control checks.
[Error] CORS Test Error:
D
code: "ERR_NETWORK"
config: {transitional: {silentJSONParsing: true, forcedJSONParsing: true, clarifyTimeoutError: false}, adapter: ["xhr", "http"], transformRequest: Array, transformResponse: Array, timeout: 0, …}
message: "Network Error"
name: "AxiosError"
request: XMLHttpRequest {listeners: Object, onreadystatechange: null, readyState: 4, timeout: 0, withCredentials: false, …}
stack: "D@https://siperjaka.cloud/assets/index-aAE4spmR.js:40:147904↵@https://siperjaka.cloud/assets/index-aAE4spmR.js:42:162726"
D Prototype
(anonymous function) (index-aAE4spmR.js:44:172337)
asyncFunctionResume
(anonymous function)
promiseReactionJobWithoutPromise
promiseReactionJob
[Error] Failed to load resource: Origin https://siperjaka.cloud is not allowed by Access-Control-Allow-Origin. Status code: 500 (api.siperjaka.cloud, line 0)
内容的提问来源于stack exchange,提问作者Hakim223

