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

时间:2019-08-24 06:57:42

标签: node.js typescript mongoose

使用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);

然后将其与

一起使用
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} 

6 个答案:

答案 0 :(得分:0)

尝试

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);

第二种方式-

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;

答案 1 :(得分:0)

我不确定您是如何编译打字稿的,但是它应该可以与tsconfig.json文件中设置的默认设置一起正常工作。

  • 通过运行tsconfig.json在项目的根目录中生成tsc --init(如前所述,您可以为此使用默认值以甚至将目标集设置为es5

  • 现在您可以运行tsc -wts-node index.ts,或者您更喜欢构建/运行代码

请注意,index.ts文件必须位于项目的根目录中,或者您需要在tsconfig.json中指定路径(rootDir选项在默认情况下已注释掉并使用相对于tsconfig文件的路径)。

还请注意,如果您正在运行tsc -w或其他一些命令来编译/运行来自tsconfig.json所在目录之外的其他目录中的代码,则需要提供指向该目录的路径,即tsc -p path_to_config -w

答案 2 :(得分:0)

我遇到了此问题,并通过将以下内容添加到tsconfig.json

来解决了这个问题
"esModuleInterop": true

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

答案 3 :(得分:0)

我有一个同样的问题,我注意到我错过了tsconfig.json

答案 4 :(得分:0)

import { model, Schema } from 'mongoose';
...
export default model<IUser>('User', UserSchema);

答案 5 :(得分:0)

确保您在 train_generator.batch_size = 2 文件中有 "allowSyntheticDefaultImports": true,

参考:https://github.com/microsoft/TypeScript-React-Starter/issues/8#issuecomment-301265017