Я почти уверен, что получаю эту ошибку из-за того, как я импортирую и экспортирую схемы mon goose, и я сделал это в Node, но попытка конвертировать мой код в TypeScript дала мне немного растущие боли.
Первоначальный запуск работает совершенно нормально, и я получаю игровую площадку GraphQL, которую я ищу. Однако, если я изменяю свою кодовую базу даже в малейшей степени, я получаю ошибку в заголовке.
models \ User.ts
import { Schema, Document, Model, model } from 'mongoose';
export interface IUser extends Document {
name: string;
email: string;
password: string;
}
//Create Schema
const UserSchema: Schema = new Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true
},
password: {
type: String,
required: true
}
});
export const User: Model<IUser> = model<IUser>('User', UserSchema);
models \ index.ts
import { User } from "./User";
export default {
User
};
lambda \ graphql.ts
import { ApolloServer, AuthenticationError } from "apollo-server-lambda";
import "reflect-metadata";
import resolvers from "../resolvers";
import schemas from "../schema";
import * as mongoose from "mongoose";
import { verify } from "jsonwebtoken";
import models from "../models";
import { MONGODB_URI, SECRET } from "../utils/constants";
export interface IToken extends Document {
name: string;
email: string;
password: string;
}
//validate jwt then set me in graphql server context
const getMe = async (token: any) => {
if (token) {
try {
const user = await verify(token, SECRET)
return user;
} catch (e) {
throw new AuthenticationError("Your Session expired. Sign in again.");
}
}
return null;
};
const server = new ApolloServer({
typeDefs: schemas,
resolvers,
context: async ({ event }) => {
const user = await getMe(event.headers.authorization);
return {
models,
me: user,
secret: SECRET
}
}
});
mongoose
.connect(MONGODB_URI, { 'useUnifiedTopology': true, 'useNewUrlParser': true })
.then(() => {
console.log("mongodb connected");
})
.catch(err => {
console.log(err);
});
exports.handler = server.createHandler({
cors: {
origin: "*",
credentials: true
}
});
Я подозреваю, что это тот способ, который я импортировал в models \ index.ts? Чего мне не хватает?