gpt4 book ai didi

node.js - 无法通过中间件检索添加到请求对象的值

转载 作者:行者123 更新时间:2023-12-02 02:45:53 25 4
gpt4 key购买 nike

我的服务器是这样配置的:

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;

这是一个使用 Apollo Server 2.0 和 ExpressJS 的 GraphQL 实现。但是,如您所见,我使用自定义中间件在访问 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] ] } }

这是怎么回事?

最佳答案

您需要添加上下文行,如下所示:

const server = new ApolloServer({
typeDefs,
resolvers,
playground: {
endpoint: '/blog', /* populates the playground endpoint box below the tab-strip. */
settings: playgroundSettings,
},
context: ({ req, res }) => ({ req, res })
});

关于node.js - 无法通过中间件检索添加到请求对象的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55058851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com