'Невозможно перезаписать модель `User` после компиляции.' используя машинопись, mon goose и лямбда-функцию - PullRequest
0 голосов
/ 28 января 2020

Я почти уверен, что получаю эту ошибку из-за того, как я импортирую и экспортирую схемы 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? Чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...