mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-30 09:27:13 +00:00
Update example to not use a custom server anymore
This commit is contained in:
parent
f490652d18
commit
5c8ac31b3c
38
examples/auth-routes/api/index.js
Normal file
38
examples/auth-routes/api/index.js
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
const express = require('express')
|
||||||
|
|
||||||
|
module.exports = function () {
|
||||||
|
// Create express router
|
||||||
|
const router = express.Router()
|
||||||
|
|
||||||
|
var app = express()
|
||||||
|
// Transform req & res to have the same API as express
|
||||||
|
// So we can use res.status() & res.json()
|
||||||
|
router.use((req, res, next) => {
|
||||||
|
Object.setPrototypeOf(req, app.request)
|
||||||
|
Object.setPrototypeOf(res, app.response)
|
||||||
|
req.res = res
|
||||||
|
res.req = req
|
||||||
|
next()
|
||||||
|
})
|
||||||
|
|
||||||
|
// Add POST - /api/login
|
||||||
|
router.post('/login', (req, res) => {
|
||||||
|
if (req.body.username === 'demo' && req.body.password === 'demo') {
|
||||||
|
req.session.authUser = { username: 'demo' }
|
||||||
|
return res.json({ username: 'demo' })
|
||||||
|
}
|
||||||
|
res.status(401).json({ message: 'Bad credentials' })
|
||||||
|
})
|
||||||
|
|
||||||
|
// Add POST - /api/logout
|
||||||
|
router.post('/logout', (req, res) => {
|
||||||
|
delete req.session.authUser
|
||||||
|
res.json({ ok: true })
|
||||||
|
})
|
||||||
|
|
||||||
|
// Add router to /api
|
||||||
|
this.addServerMiddleware({
|
||||||
|
path: '/api',
|
||||||
|
handler: router
|
||||||
|
})
|
||||||
|
}
|
@ -1,3 +1,6 @@
|
|||||||
|
const bodyParser = require('body-parser')
|
||||||
|
const session = require('express-session')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
head: {
|
head: {
|
||||||
title: 'Auth Routes',
|
title: 'Auth Routes',
|
||||||
@ -9,5 +12,26 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
build: {
|
build: {
|
||||||
vendor: ['axios']
|
vendor: ['axios']
|
||||||
}
|
},
|
||||||
|
/*
|
||||||
|
** Add server middleware
|
||||||
|
** Nuxt.js uses `connect` module as server
|
||||||
|
** So most of express middleware works with nuxt.js server middleware
|
||||||
|
*/
|
||||||
|
serverMiddleware: [
|
||||||
|
// body-parser middleware
|
||||||
|
bodyParser.json(),
|
||||||
|
// session middleware
|
||||||
|
session({
|
||||||
|
secret: 'super-secret-key',
|
||||||
|
resave: false,
|
||||||
|
saveUninitialized: false,
|
||||||
|
cookie: { maxAge: 60000 }
|
||||||
|
})
|
||||||
|
],
|
||||||
|
/*
|
||||||
|
** Add our custom module
|
||||||
|
** In this module we add /api/login & /api/logout routes
|
||||||
|
*/
|
||||||
|
modules: ['~/api']
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,15 @@
|
|||||||
{
|
{
|
||||||
"name": "auth-routes",
|
"name": "auth-routes",
|
||||||
"description": "",
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.16.1",
|
"axios": "^0.16.1",
|
||||||
"body-parser": "^1.17.2",
|
"body-parser": "^1.17.2",
|
||||||
"cross-env": "^5.0.0",
|
|
||||||
"express": "^4.15.3",
|
"express": "^4.15.3",
|
||||||
"express-session": "^1.15.3",
|
"express-session": "^1.15.3",
|
||||||
"nuxt": "^1.0.0-alpha1"
|
"nuxt": "latest"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "node server.js",
|
"dev": "nuxt",
|
||||||
"build": "nuxt build",
|
"build": "nuxt build",
|
||||||
"start": "cross-env NODE_ENV=production node server.js"
|
"start": "nuxt start"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,22 +28,25 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
login () {
|
async login () {
|
||||||
this.$store.dispatch('login', {
|
try {
|
||||||
username: this.formUsername,
|
await this.$store.dispatch('login', {
|
||||||
password: this.formPassword
|
username: this.formUsername,
|
||||||
})
|
password: this.formPassword
|
||||||
.then(() => {
|
})
|
||||||
this.formUsername = ''
|
this.formUsername = ''
|
||||||
this.formPassword = ''
|
this.formPassword = ''
|
||||||
this.formError = null
|
this.formError = null
|
||||||
})
|
} catch(e) {
|
||||||
.catch((e) => {
|
|
||||||
this.formError = e.message
|
this.formError = e.message
|
||||||
})
|
}
|
||||||
},
|
},
|
||||||
logout () {
|
async logout () {
|
||||||
this.$store.dispatch('logout')
|
try {
|
||||||
|
await this.$store.dispatch('logout')
|
||||||
|
} catch (e) {
|
||||||
|
this.formError = e.message
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,56 +0,0 @@
|
|||||||
const Nuxt = require('nuxt')
|
|
||||||
const bodyParser = require('body-parser')
|
|
||||||
const session = require('express-session')
|
|
||||||
const app = require('express')()
|
|
||||||
|
|
||||||
const host = process.env.HOST || '127.0.0.1'
|
|
||||||
const port = process.env.PORT || '3000'
|
|
||||||
|
|
||||||
// Body parser, to access req.body
|
|
||||||
app.use(bodyParser.json())
|
|
||||||
|
|
||||||
// Sessions to create req.session
|
|
||||||
app.use(session({
|
|
||||||
secret: 'super-secret-key',
|
|
||||||
resave: false,
|
|
||||||
saveUninitialized: false,
|
|
||||||
cookie: { maxAge: 60000 }
|
|
||||||
}))
|
|
||||||
|
|
||||||
// POST /api/login to log in the user and add him to the req.session.authUser
|
|
||||||
app.post('/api/login', function (req, res) {
|
|
||||||
if (req.body.username === 'demo' && req.body.password === 'demo') {
|
|
||||||
req.session.authUser = { username: 'demo' }
|
|
||||||
return res.json({ username: 'demo' })
|
|
||||||
}
|
|
||||||
res.status(401).json({ message: 'Bad credentials' })
|
|
||||||
})
|
|
||||||
|
|
||||||
// POST /api/logout to log out the user and remove it from the req.session
|
|
||||||
app.post('/api/logout', function (req, res) {
|
|
||||||
delete req.session.authUser
|
|
||||||
res.json({ ok: true })
|
|
||||||
})
|
|
||||||
|
|
||||||
// Import and Set Nuxt.js options
|
|
||||||
let config = require('./nuxt.config.js')
|
|
||||||
config.dev = !(process.env.NODE_ENV === 'production')
|
|
||||||
|
|
||||||
// Init Nuxt.js
|
|
||||||
new Nuxt(config)
|
|
||||||
.then((nuxt) => {
|
|
||||||
// nuxt middlware
|
|
||||||
app.use(nuxt.render)
|
|
||||||
// Build only in dev mode
|
|
||||||
if (config.dev) {
|
|
||||||
nuxt.build()
|
|
||||||
.catch((error) => {
|
|
||||||
console.error(error) // eslint-disable-line no-console
|
|
||||||
process.exit(1)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
// Listen the server
|
|
||||||
app.listen(port, host)
|
|
||||||
console.log('Server listening on ' + host + ':' + port) // eslint-disable-line no-console
|
|
||||||
})
|
|
||||||
|
|
@ -11,31 +11,27 @@ export const mutations = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const actions = {
|
export const actions = {
|
||||||
|
// nuxtServerInit is called by Nuxt.js before server-rendering every page
|
||||||
nuxtServerInit ({ commit }, { req }) {
|
nuxtServerInit ({ commit }, { req }) {
|
||||||
if (req.session && req.session.authUser) {
|
if (req.session && req.session.authUser) {
|
||||||
commit('SET_USER', req.session.authUser)
|
commit('SET_USER', req.session.authUser)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
login ({ commit }, { username, password }) {
|
async login ({ commit }, { username, password }) {
|
||||||
return axios.post('/api/login', {
|
try {
|
||||||
username,
|
const { data } = await axios.post('/api/login', { username, password })
|
||||||
password
|
commit('SET_USER', data)
|
||||||
})
|
} catch (error) {
|
||||||
.then((res) => {
|
if (error.response && error.response.status === 401) {
|
||||||
commit('SET_USER', res.data)
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
if (error.response.status === 401) {
|
|
||||||
throw new Error('Bad credentials')
|
throw new Error('Bad credentials')
|
||||||
}
|
}
|
||||||
})
|
throw error
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
logout ({ commit }) {
|
async logout ({ commit }) {
|
||||||
return axios.post('/api/logout')
|
await axios.post('/api/logout')
|
||||||
.then(() => {
|
commit('SET_USER', null)
|
||||||
commit('SET_USER', null)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user