ES6:模块“mongoose”没有默认导出

Bil*_*ill 7 mongoose node.js typescript

使用 ES6 导入和导出我觉得我应该能够将导入声明为 import mongoose, { Schema, Document } from 'mongoose';但我收到错误Module '"mongoose"' has no default export.

以下确实有效,但显然不是进行此导入的正确方法。导出默认 ID 也想删除。

import * as mongoose from 'mongoose';
import { Schema, Document } from 'mongoose';

export interface IUser extends Document {
  email: string;
  password: string;
}

const UserSchema: Schema = new Schema({
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true }
});

export default mongoose.model<IUser>('User', UserSchema);
Run Code Online (Sandbox Code Playgroud)

然后我用它

import UserModel, { IUser } from '../models/example'
import * as bcrypt from 'bcrypt';

class User {
  static register = async (req: Request, res: Response) => {
    const email = req.body.email;
    const password = req.body.password;
    const alreadyRegistered = await UserModel.findOne({email}).exec();
    if (!alreadyRegistered) {
      const hashedPassword = await bcrypt.hash(password,10);
        if (!hashedPassword) {
          res.status(500).send({ message: "Failed to encrypt your password" });
        } else {
          const user = new UserModel(<IUser>{email:email, password:hashedPassword});
          const saved = await user.save();
          if (!saved) {
            res.status(500).send({ message: "Failed to register you" });
          } else {
            res.status(200).send({ message: "You are now registered" });
          }
        }
    } else {
      res.status(400).send({ message: "You have already registered" });
    }
  };
}

export {User} 
Run Code Online (Sandbox Code Playgroud)

小智 14

我遇到了这个问题并通过添加以下内容来修复它tsconfig.json

"esModuleInterop": true
Run Code Online (Sandbox Code Playgroud)

然后我就可以正常导入了 import mongoose from 'mongoose'


Gau*_*rav 5

尝试这个

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const UserSchema = new Schema({
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true }
});


module.exports = mongoose.model('User', UserSchema);
Run Code Online (Sandbox Code Playgroud)

第二种方式——

import * as mongoose from 'mongoose';

type UserSchema = IUser & mongoose.Document;

const User = mongoose.model<UserSchema>('User', new mongoose.Schema({
        email  : { type: String, required: true, unique: true },
          password: { type: String, required: true }
    }));
export = User;
Run Code Online (Sandbox Code Playgroud)