2016-06-05 4 views
0

Привет я пытаюсь переписывание моего кода из простых JS в машинопись и есть некоторые проблемы с Mongoose схемами ...Mongoose + Машинопись Схема Схема экспорта

/// <reference path="../typings/tsd.d.ts" /> 
import * as mongoose from 'mongoose'; 
import * as bcrypt from "bcrypt"; 

var SALT_WORK_FACTOR = 10; 
var mongodbURL = 'mongodb://localhost/test'; 
var mongodbOptions = {}; 

mongoose.connect(mongodbURL, mongodbOptions); 

var Schema = mongoose.Schema; 

// User schema 
var User = new Schema({ 
    username: { type: String, required: true, unique: true }, 
    password: { type: String, required: true }, 
    is_admin: { type: Boolean, default: false }, 
    created: { type: Date, default: Date.now } 
}); 

// Bcrypt middleware on UserSchema 
User.pre('save', function(next) { 
    var user = this; 

    if (!user.isModified('password')) return next(); 

    bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) { 
     if (err) return next(err); 

     bcrypt.hash(user.password, salt, function(err, hash) { 
      if (err) return next(err); 
      user.password = hash; 
      next(); 
     }); 
    }); 
}); 

//Password verification 
User.methods.comparePassword = function(password, cb) { 
    bcrypt.compare(password, this.password, function(err, isMatch) { 
     if (err) return cb(err); 
     cb(isMatch); 
    }); 
}; 

var userModel: mongoose.Model<any> = mongoose.model("User", User); 

//Define Models 

// Export Models trying ALL WAYS (((((

declare var exports: any; 
exports.userModel = userModel; 

(module).exports = userModel; 

exports = { 
    userModel: userModel 
} 

export = userModel; // EXPORT 

но когда я компилирую * .TS драм импортировать этот файл я вижу :

import {userModel} from '../config/mongo_database'; 

не экспортированный элемент 'userModel.

ИЛИ

import db = require('../config/mongo_database'); 

Свойство 'userModel' не существует по типу 'Модель'

но console.log(db) показать мне

{ userModel: 
    { [Function: model] 
    base: 
     { connections: [Object], 
     plugins: [], 
     models: [Object], 
     modelSchemas: [Object], 
     options: [Object] }, 
    modelName: 'User', 
    model: [Function: model], 

..... .......

Есть ли методы, которые не используют TS combo (интерфейс, класс, схему, экспорт) и просто используют схемы мангуста?)

P.S. извините за мой английский ..

ответ

1

1.Remove коды после // Define Models. Замените var userModel: mongoose.Model<any> = mongoose.model("User", User); на export var userModel: mongoose.Model<any> = mongoose.model("User", User); И затем вы можете использовать импорт с import {userModel} from '../config/mongo_database';.

2.Typescript не знает вашу модель во время компиляции, если вы не предоставите интерфейс:

interface IUser{ 
    username: string; 
    password: string; 
    // ... 
} 
export const UserModel = mongoose.model <IUser>("User", User); 
+0

спасибо за ответ, у меня есть какой-то вопрос-то еще 'интерфейс IUser { \t имя пользователя: строка; \t пароль: string; // .... } экспорт Const UserModel = mongoose.model ("Пользователь", пользователь); ' в консоли Type 'IUser' не удовлетворяет ограничению 'Документ'. Свойство 'get' отсутствует в типе 'IUser'. Тип «IUser» не удовлетворяет ограничению «Документ». Свойство '_id' отсутствует в типе 'IUser'. Мне нужно добавить все свойства из консоли в интерфейс?) – Melixion

+0

'export var userModel: mongoose.Model = mongoose.model (« Пользователь », Пользователь);' - эта проблема решения) thnks) – Melixion

+0

Пусть 'IUser' расширяет' mongoose.Document' и использует 'export var userModel: mongoose.Model = mongoose.model («Пользователь», Пользователь); ', он будет проверен typechecked. @Melixion – Zen