'use strict'; const app = require('koa')(); const jwt = require('koa-jwt'); const bodyParser = require('koa-bodyparser'); const send = require('koa-send'); const serve = require('koa-static'); const jsonwebtoken = require('jsonwebtoken'); const error = require('./middleware/error-middleware.js'); const router = require('koa-router')(); // do not use this secret for production const secret = 'supersecret'; app.use(error()); app.use(bodyParser()); app.use(serve('dist')); app.use(jwt({ secret }).unless({ path: [/^(?!\/api\/)/] })); // for example use, we just check for specific username/password // in the real world, we would check a database and check hashed password router.post('/auth', function* () { const username = this.request.body.username; const password = this.request.body.password; if (username !== 'chuck' && password !== 'norris') { this.throw(401, 'Invalid username/password.'); } const user = { username, email: 'chuck@norris.com', firstName: 'Chuck', lastName: 'Norris', roles: ['admin'] }; const token = jsonwebtoken.sign(user, secret, { issuer: 'localhost', audience: 'someaudience', expiresIn: '1d' }); this.body = { token }; }); app.use(router.routes()); app.use(function* () { yield send(this, '/dist/index.html'); }); app.on('error', err => console.log(err)); app.listen(3000, () => console.log('example running on port 3000'));
¿Cómo resolver este error? Si ejecuto un servidor con el puerto 80 e intento usar XMLHttpRequest, recibo este error: Error: escucha EADDRINUSE ¿Por qué es un problema para NodeJS, si quiero hacer una solicitud, mientras ejecuto un servidor en el puerto 80? ? Para los navegadores web no es un problema: puedo navegar en Internet.
Su problema no tiene nada que ver con CORS.
Está intentando crear un servidor que escuche las solicitudes entrantes en el puerto 80. (El código que proporcionó dice puerto 3000, pero supondré que está preguntando qué sucede cuando cambia eso).
El mensaje de error dice que no puede ejecutar un servidor que está escuchando en ese puerto porque está en uso. Esto significa que ya tiene un servidor (posiblemente otra instancia del mismo servidor, pero más probablemente uno diferente, como Apache HTTP) que ya se ejecuta y usa el puerto 80.
No puede tener dos servidores escuchando en el mismo puerto. Si un navegador realiza una solicitud HTTP al puerto 80, entonces la computadora no sabrá a cuál de los dos servidores se dirige la solicitud.
No es un problema para los navegadores web porque no escuchan las solicitudes entrantes. Hacen solicitudes salientes.