Je travaille sur la fonctionnalité de discussion. Il existe deux types de clients, l'un est le frontend de ma demande et la seconde est un autre site Web. Je sais qu'il y a beaucoup de problèmes comme celui-ci, mais j'ai essayé toute la solution, mais je reçois toujours l'erreur suivante:
accès à XMLHTTPQUEST à 'https: //mydomain/socket.io/? EIO = 3 & Transport = NCJOM1W' de l'origine 'NULL' a été bloqué par la stratégie CORS: la valeur de "l'accès-contrôle-control-autorisant- L'en-tête d'origine dans la réponse ne doit pas être le fichier wildcard '*' lorsque le mode d'identification de la demande est «Inclure». Le mode de vérification des demandes d'informations initiées par le XMLHTTPRequest est contrôlé par l'attribut Sansedentials. P> blockQuote>
Et cette erreur que je vais sur le côté client de mon propre front extrémité: P>
https: //mydomain/socket.io/? EIO = 3 & Transport = Polling & T = NCJNJUX 404 (non trouvé) P> blockQuote>
Voici comment j'essaie de se connecter de côté client. p>
xxx pré> et ceci est mon code serveur.js p>
const express = require("express"); const mongoose = require("mongoose"); const bodyParser = require("body-parser"); const passport = require("passport"); const users = require("./routes/api/users"); const base = require("./routes/api/base"); const leads = require("./routes/api/leads"); const requests = require("./routes/api/requests"); const offApp = require("./routes/api/offApp"); const chat = require("./routes/api/chat"); const chatSocket = require("./routes/socket/chat"); const path = require("path"); // on top const app = express(); // const client = require('socket.io').listen(4000).sockets; const https = require('https'); const fs = require('fs'); var options = { pfx: fs.readFileSync('certificate.pfx'), passphrase: 'password' }; app.all('/*', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, *'); next(); }); var server = https.createServer(options, app); var client = require("socket.io").listen(server); client.origins('*:*') ; server.listen(443); // Bodyparser middleware app.use( bodyParser.urlencoded({ extended: false }) ); app.use(bodyParser.json()); // DB Config const db = require("./config/keys").mongoURI; // Connect to MongoDB mongoose .connect( db, { useNewUrlParser: true }, (err, db) => { if (err) { throw err; } console.log('MongoDB connected'); chatSocket(db, client); }); // Passport middleware app.use(passport.initialize()); // Passport config require("./config/passport")(passport); // Routes app.use("/api/users", users); app.use("/api/base", base); app.use("/api/leads", leads); app.use("/api/requests", requests); app.use("/api/offapp", offApp); app.use("/api/chat", chat); const port = process.env.PORT || 5000; app.use(express.static("client/build")); // change this if your dir structure is different app.get("*", (req, res) => { res.sendFile(path.resolve(__dirname, "client", "build", "index.html")); }); app.listen(port, () => console.log(`Server up and running on port ${port} !`));
3 Réponses :
// utilise des cors comme ça-
// Vous devez l'utiliser comme des articles moyens
danois essayer cette solution, j'espère que cela fonctionnera
const client = require("socket.io")(server, { handlePreflightRequest: (req, res) => { const headers = { "Access-Control-Allow-Headers": "Content-Type, Authorization", "Access-Control-Allow-Origin": req.headers.origin, //or the specific origin you want to give access to, "Access-Control-Allow-Credentials": true }; res.writeHead(200, headers); res.end(); } }); client.on("connection", () => { console.log("Connected!"); }); server.listen(443);
Installez le package Cors à l'aide de NPM i Cors P>
dans votre fichier App.js, Cors Cors = Exiger ('Cors') P>
App.Utilisez (Cors ()); P>
Quelle version de socket.io que vous utilisez dans le côté serveur?
@yueyou j'utilise 2.3.0