Я хочу использовать операторы журнала morgan
tiny
для всех моих маршрутов, кроме конечных точек graphql. Я использую экспресс и Apollo 2, и мне не удалось заставить промежуточное ПО работать с экспрессом. Как показывает пример кода, я могу установить промежуточное ПО для всего экспресс-приложения, но я хочу ограничить область действия.
Моей первой попыткой было создать express.router()
и передать маршрутизатор apolloServer.applyMiddleware
, но, похоже, это не сработало.
Я хочу использовать _5 _--, но я также хочу использовать express-jwt
промежуточное ПО.
import morgan from 'morgan'
import { mergeSchemas } from 'graphql-tools'
import { ApolloServer } from 'apollo-server-express'
import assessmentSchema from './assessment/schema'
import AssessmentAPI from './assessment/dataSource'
import userSchema from './user/schema'
import UserAPI from './user/dataSource'
/**
* Installs apollo-server to handle requests under `path`
* @param {*} app Express instance
* @param {*} path route path, like '/graphql'
*/
export const createApi = (app, path) => {
const dataSources = () => ({
assessmentAPI: new AssessmentAPI({ store: 'intentionally undefined' }),
userAPI: new UserAPI()
})
const schema = mergeSchemas({
schemas: [assessmentSchema, userSchema]
})
morgan.token('graphql-query', req => {
const { operationName } = req.body
return `GRAPHQL: Operation Name: ${operationName}`
})
// TODO: Add custom logging middleware for GraphQL queries/mutations
// The next line would add middleware to all of express, but I only want this style of logging for graphQL
/*** Question is about the following line ***/
// app.use(morgan(':graphql-query'))
const apolloServer = new ApolloServer({ schema, dataSources })
apolloServer.applyMiddleware({ app, path })
}
Спасибо!