我很确定由于导入和导出猫鼬模式的方式而收到此错误,我已经在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中导入的方式吗?我想念什么?
答案 0 :(得分:0)
这是一个很晚的回复,但这并不是很难解决。在导出语句中,您必须检查现有模型,然后导出该模型或定义的模型。
这是非类型化方式:
export const User = mongoose.models.User || mongoose.model('User', UserSchema);