使用 AWS Lambda 部署 Apollo Server 时出错



人们,你们好吗?我有一个查询,我刚刚在 AWS Lambda 中实现了使用 apollo 服务器制作的 API。我使用官方文档作为指南,但我注意到上下文处理略有不同。我对后者有疑问,因为我进行了某些更改,并且使用"无服务器离线"在本地一切正常,但是一旦部署它就没有了。显然,我生成的身份验证上下文没有完成到达我的查询。如果有人能用这个指导我一点,我将不胜感激。

这是我的 API 索引:

const { ApolloServer, gql } = require('apollo-server-lambda');
const typeDefs = require('./db/schema');
const resolvers = require('./db/resolvers');
const db = require('./config/db');
const jwt = require('jsonwebtoken');
require('dotenv').config({ path: 'variables.env' });
db.conectDB();
// The ApolloServer constructor requires two parameters: your schema
// definition and your set of resolvers.
const server = new ApolloServer({ 
typeDefs,
resolvers,
playground: { 
endpoint: "/graphql"
},
context: ({ event, context }) => {
try {
const token = event.headers['authorization'] || '';

if(token){
context.user = jwt.verify(token.replace('Bearer ',''), process.env.KEY_TOKEN);
}

return {
headers: event.headers,
functionName: context.functionName,
event,
context,
}
} catch (error) {
console.error(error);
}
}
});
exports.graphqlHandler = server.createHandler({
cors: {
origin: '*',
credentials: true,
},
});

这是我的查询:

getUserByToken: async (_, {}, { context }) => {
if(context)
throw new Error((context ? 'context' : '') + ' ' + (context.user ? 'user' : ''));
let user = await db.findOne('users',{ _id: ObjectId(context.user._id) });
if(user.birthdate)
user.birthdate = user.birthdate.toString();
if(user.password)
user.password = true;
else
user.password = false;
return user;
}

我的 API 响应: 接口响应

据我所知,您没有在上下文中调用getUserByToken。 这是对的吗? 所以,我不确定你是如何遇到这个错误的。

我能给你一些指示吗?

连接到数据库可能是(或应该是(异步的。 为此,我会像这样运行您的代码:


db.connect()
.then(() => {
... handle your request in here
})
.catch(console.error);

我想你的意思是在这一行中调用你的getUserByToken:

context.user = jwt.verify(token.replace('Bearer ',''), process.env.KEY_TOKEN);

最新更新