A propriedade serverMiddleware
Define o intermediário no lado do servidor.
-
Tipo:
Array
-
Itens:
String
ouObject
ouFunction
-
Itens:
O Nuxt internamente cria um instância de connect que você pode adicionar ao seu próprio intermediário. Isto permite-nos registar rotas adicionais (normalmente rotas /api
) sem precisar de um servidor externo.
Por connect
mesmo ser um intermediário, o intermediário registado funcionará com ambos nuxt start
e também quando usado como um intermediário com uso programático como o express-template . Os Módulos do Nuxt pode também fornecer o serverMiddleware
usando o this.addServerMiddleware()
Adicionalmente a eles, nós introduzimos uma opção prefix
a qual o valor padrão será true
. Ela adicionará uma base de roteador para os intermediários do seu servidor.
Exemplo:
-
Caminho do intermediário do servidor:
/server-middleware
-
Base de roteador:
/admin
-
Com o
prefix: true
(valor padrão):/admin/server-middleware
-
Com o
prefix: false
:/server-middleware
serverMiddleware vs middleware!
Não confunda ele com o intermediários de rotas as quais são chamadas antes de cada rota pelo Vue no lado do cliente ou na renderização no lado do servidor. O intermediário listado dentro da propriedade serverMiddleware
executa no lado do servidor antes do vue-server-renderer
e pode ser usado para tarefas específicas do servidor como manipulando de requisições de API ou servindo recursos.
serverMiddleware
ao diretório middleware/
.Os intermediários são empacotados pelo webpack dentro do seu pacote de produção e executam sobre o gatilho beforeRouteEnter
. Se você adicionar o serverMiddleware
ao diretório middleware/
ele será erradamente tomado pelo Nuxt como um intermediário comum e adicionará dependências erradas ao seu pacote ou gerar erros.Uso
Se o intermediário for um sequência de caracteres o Nuxt tentará pedir e resolver ele automaticamente.
import serveStatic from 'serve-static'
export default {
serverMiddleware: [
// Registará o pacote `redirect-ssl` de npm
'redirect-ssl',
// Registará o ficheiro do diretório `server-middleware` do projeto manipular os pedidos de `/server-middleware/*`
{ path: '/server-middleware', handler: '~/server-middleware/index.js' },
// Podemos também criar instâncias personalizadas
{ path: '/static2', handler: serveStatic(__dirname + '/static2') }
]
}
Intermediário de Servidor Personalizado
É também possível escrever um intermediário personalizado. Para mais informações consulte a Documentação do Connect
.
Intermediário (server-middleware/logger.js
):
export default function (req, res, next) {
// O `req` é o objeto de requisição http do Node.js
console.log(req.url)
// O `res` é o objeto de resposta http do Node.js
// O `next` é uma função para chamar o próximo intermediário
// Não esqueça de chamar o `next` no final se o seu intermediário não for um ponto final!
next()
}
serverMiddleware: ['~/server-middleware/logger']
Ponto Final de API Personalizada
Um intermediário de servidor pode também estender o Express
. Isto permite a criação de pontos finais de REST.
const bodyParser = require('body-parser')
const app = require('express')()
app.use(bodyParser.json())
app.all('/getJSON', (req, res) => {
res.json({ data: 'data' })
})
module.exports = app
serverMiddleware: [
{ path: "/server-middleware", handler: "~/server-middleware/rest.js" },
],
A Sintaxe de Objeto
Se o seu intermediário de servidor compreende em uma lista de funções mapeadas para os caminhos:
export default {
serverMiddleware: [
{ path: '/a', handler: '~/server-middleware/a.js' },
{ path: '/b', handler: '~/server-middleware/b.js' },
{ path: '/c', handler: '~/server-middleware/c.js' }
]
}
Você pode alternativamente passar um objeto para definir eles, como o seguinte:
export default {
serverMiddleware: {
'/a': '~/server-middleware/a.js',
'/b': '~/server-middleware/b.js',
'/c': '~/server-middleware/c.js'
}
}












































