【发布时间】:2020-10-20 07:18:42
【问题描述】:
各位,你们好吗?我有一个疑问,我刚刚在 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 响应: API response
【问题讨论】:
标签: javascript aws-lambda graphql apollo apollo-server