使用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}
答案 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 -w
或ts-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