Мой сервер настроен таким образом:
import express from 'express';
import { ApolloServer } from 'apollo-server-express';
import { typeDefs, resolvers } from './schema';
import playgroundSettings from './playground.json';
import isAuth from './middleware/isAuth';
// GraphQL: Schema
const server = new ApolloServer({
typeDefs,
resolvers,
playground: {
endpoint: '/blog', /* populates the playground endpoint box below the tab-strip. */
settings: playgroundSettings,
},
});
// Express: Initialize
const app = express();
// Middleware: isAuth
app.use(isAuth);
// Middleware: GraphQL route
server.applyMiddleware({
app,
path: '/',
});
// Express: Listener
app.listen(process.env.GRAPH_BLOG_PORT, () => {
console.log(`Server started on port: ${process.env.GRAPH_BLOG_PORT}`);
});
// Exports
export default app;
Это реализация GraphQL с использованием Apollo Server 2.0 и ExpressJS.Однако, как вы можете видеть, я использую пользовательское промежуточное ПО для выполнения некоторых задач авторизации перед тем, как перейти к маршруту GraphQL.Это промежуточное ПО называется isAuth.js
и вызывается и выполняется, как и ожидалось.Однако я почему-то не могу получить свойства, которые это промежуточное ПО добавляет к моему объекту req, из распознавателя.Промежуточное программное обеспечение выглядит следующим образом:
// isAuth.js
import jwt from 'jsonwebtoken';
module.exports = (req, res, next) => {
let decodedToken;
const authHeader = req.get('Authorization');
if (!authHeader) {
req.isAuth = false;
return next();
}
const token = authHeader.split(' ')[1];
if (!token || token === '') {
req.isAuth = false;
return next();
}
try {
decodedToken = jwt.verify(token, process.env.GRAPH_BLOG_JWT_SECRET);
} catch (err) {
req.isAuth = false;
return next();
}
if (!decodedToken) {
req.isAuth = false;
return next();
}
req.isAuth = true;
req._id = decodedToken._id;
return next();
};
И когда я делаю console.log(req);
в своем преобразователе, я ожидаю свойства, такие как isAuth
и _id
, но вместо этого получаю следующее:
{ _extensionStack:
GraphQLExtensionStack {
extensions: [ [FormatErrorExtension], [CacheControlExtension] ] } }
Что происходит?