- Localhost-API: http://localhost:5001/nft-discord-relay ... r/validate
- Wolke Funktion: https://us-central1-nft-discord-relay.c ... r/validate
Zugriff zum Abrufen bei „http://localhost:5001/nft-discord-relay ... r/validate“ vom Ursprung „http://localhost:1212/“ wurde durch CORS-Richtlinie blockiert: Antwort auf Preflight-Anfrage nicht. Die Zugriffskontrollprüfung besteht nicht: Auf der angeforderten Ressource ist kein Header „Access-Control-Allow-Origin“ vorhanden.
Hier ist das Relevante Setup:
Electron App Code
So sende ich die Anfrage:
Code: Select all
export async function validateFarmer(discordId, farmerCode, walletAddress) {
try {
const response = await fetch(`${API_BASE_URL}/farmer/validate`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
discordId,
farmerCode,
walletAddress,
}),
});
const data = await response.json();
return data;
} catch (error) {
console.error(error);
return {
isValid: false,
message: 'Failed to connect to the server',
};
}
}
Ich verwende die Middleware Express und cors, um CORS zu verarbeiten. Hier ist der relevante Code:
CORS Middleware
Code: Select all
const cors = require('cors');
const corsMiddleware = cors({
origin: (origin, callback) => {
const allowedOrigins = [
'http://localhost:1212',
'https://us-central1-nft-discord-relay.cloudfunctions.net',
];
if (!origin) return callback(null, true); // Allow requests with no origin (e.g., mobile apps)
if (allowedOrigins.includes(origin)) {
callback(null, true);
} else {
callback(new Error('Not allowed by CORS'));
}
},
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
allowedHeaders: ['Content-Type', 'Authorization'],
credentials: true,
maxAge: 86400, // Cache preflight requests for 24 hours
});
module.exports = corsMiddleware;
Code: Select all
const express = require('express');
const router = express.Router();
const corsMiddleware = require('./path-to-cors-middleware'); // Adjust the path accordingly
router.use(corsMiddleware);
router.post('/farmer/validate', async (req, res) => {
console.info('Validate request received', {
discordId: req.body.discordId,
walletAddress: req.body.walletAddress,
});
const { discordId, farmerCode, walletAddress } = req.body;
if (!discordId || !farmerCode || !walletAddress) {
console.error('→ Missing required fields');
return res.status(400).json({
success: false,
message: 'Discord ID, Farmer Code, and Wallet Address are required',
});
}
const result = await FarmerHelper.validateFarmer(
discordId,
farmerCode,
walletAddress
);
console.info('→ Validation complete', {
discordId,
isValid: result.isValid,
});
res.status(result.isValid ? 200 : 400).json(result);
});
module.exports = router;