Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Is there an example of using a custom server? #554

Closed
kito-chall opened this issue Aug 6, 2020 · 4 comments
Closed

Is there an example of using a custom server? #554

kito-chall opened this issue Aug 6, 2020 · 4 comments
Labels
help needed The maintainer needs help due to time constraint/missing knowledge question Ask how to do something or how something works

Comments

@kito-chall
Copy link

kito-chall commented Aug 6, 2020

I want to use Socket.io so I created a custom server.

If you sign in after starting with node server.js
displayed on the screen : Cannot POST /api/auth/signin/auth0

Please let me know if you have any solution or hint.

// server.js

// cargamos express e iniciamos una aplicación
const app = require('express')()
// creamos un servidor HTTP desde de nuestra aplicación de Express
const server = require('http').Server(app)
// creamos una aplicación de socket.io desde nuestro servidor HTTP
const io = require('socket.io')(server)
// cargamos Next.js
const next = require('next')

// verificamos si estamos corriendo en desarrollo o producción
const dev = process.env.NODE_ENV !== 'production'
// iniciamos nuestra aplicación de Next.js
const nextApp = next({ dev })
// obtenemos el manejador de Next.js
const nextHandler = nextApp.getRequestHandler()

// este array va a ser nuestra base de datos
// no es una base de datos de verdad, pero para el ejemplo nos sirve
const messages = []

// cuando un usuario se conecte al servidor de sockets
io.on('connection', socket => {
	// escuchamos el evento `message`
	socket.on('message', (data) => {
		// guardamos el mensaje en nuestra "DB"
		messages.push(data)
		// enviamos el mensaje a todos los usuarios menos a quién los envió
		socket.broadcast.emit('message', data)
	})
})

// iniciamos nuestra aplicación de Next.js
nextApp.prepare().then(() => {
	// definimos una URL para obtener los mensajes
	app.get('/messages', (req, res) => {
		// y respondemos con la lista de mensajes serializada como JSON
		res.json(messages)
	})

	// para cualquier otra ruta de la aplicación
	app.get('*', (req, res) => {
		// dejamos que el manejador de Next se encargue y responda con el HTML o un 404
		return nextHandler(req, res)
	})

	// iniciamos el servidor HTTP en el puerto 3000
	server.listen(3000, (err) => {
		// si ocurre un error matamos el proceso
		if (err) process.exit(0)
		// si todo está bien dejamos un log en consola
		console.log('> Ready on http://localhost:3000')
	})
})
@kito-chall kito-chall added the question Ask how to do something or how something works label Aug 6, 2020
@iaincollins
Copy link
Member

Tagging in #531 (related)

@iaincollins iaincollins added the help needed The maintainer needs help due to time constraint/missing knowledge label Aug 6, 2020
@iaincollins
Copy link
Member

Off hand this looks about right but I think you want to change this:

app.get('*', (req, res) => {
  return nextHandler(req, res)
})

to this, so that it it passes on POST requests as well as GET requests:

app.all('*', (req, res) => {
  return nextHandler(req, res)
})

@RichardSPrins
Copy link

Any update on this issue?

@kito-chall
Copy link
Author

Closing this issue due to inactivity.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help needed The maintainer needs help due to time constraint/missing knowledge question Ask how to do something or how something works
Projects
None yet
Development

No branches or pull requests

3 participants