MongoDB ничего не возвращает при размещении модели в другом файле - PullRequest
0 голосов
/ 29 июня 2018

У меня очень простой сервер, который можно запустить тремя способами:

  1. [BLOCK 2 ENABLED] / [BLOCK 1 DISABLED]
    Определение интерфейсов, схемы и модели в одном файле.

  2. [BLOCK 1 ENABLED] / [BLOCK 2 DISABLED]
    Определение интерфейсов, схемы и модели во внешнем файле: . / Models / user.ts

Содержимое [BLOCK 2] точно такое же, как содержимое файла: . / Models / user.ts .

  1. С другой стороны, если я переместу файл: user.ts в:
    . / Server / models / user.ts
    тогда код работает правильно, но по некоторым конкретным причинам он мне нужен по адресу:
    . / Модели / user.ts

На всякий случай, здесь у вас есть хранилище:

https://github.com/napolev/mongodb-experiments

Вот код:

. / Server / server.ts [BLOCK 2 ENABLED]

import * as mongoose from 'mongoose';
import * as colors from 'colors';
/*/
// BLOCK 1:
import { User, IUserDocument } from '../models/user';
/*/
// BLOCK 2:
import { Document, Schema, Model, model} from "mongoose";
export interface IUser {
    username:   string,
    password:   string,
    email:      string,
    company:    string,
}
export interface IUserDocument extends IUser, Document {

}
export var UserSchema: Schema = new Schema({
    username:   String,
    password:   String,
    email:      String,
    company:    String,
});
export const User: Model<IUserDocument> = model<IUserDocument>("User", UserSchema);
//*/

mongoose.connect('mongodb://localhost:9100/mongodb-experiments');

User.find({}, function(err, users: IUserDocument[]){
    console.log(users);
});

let message = colors.green('Hello') + ' '  + colors.red.bgYellow.underline('World') + ' ' +  colors.blue.bgRed('!!!');

console.log(message);

// To work with the Mongo Shell:
// $ cd /path/to/mongodb/bin"
// $ mongo --port 9100
// use mongodb-experiments
// db.users.insert( { username: "bill.gates", password: "windows", email: "billgates@microsoft.com", company: "Microsoft" } )
// db.users.insert( { username: "steve.jobs", password: "mac", email: "stevejobs@apple.com", company: "Apple" } );
// db.getCollection("users").find()

. / Модели / user.ts

import { Document, Schema, Model, model} from "mongoose";

export interface IUser {
    username:   string,
    password:   string,
    email:      string,
    company:    string,
}
export interface IUserDocument extends IUser, Document {

}
export var UserSchema: Schema = new Schema({
    username:   String,
    password:   String,
    email:      String,
    company:    String,
});

export const User: Model<IUserDocument> = model<IUserDocument>("User", UserSchema);

Предположим, у нас есть фиктивные данные в базе данных:

$ cd /path/to/mongodb/bin"
$ mongo --port 9100
use mongodb-experiments
db.users.insert( { username: "bill.gates", password: "windows", email: "billgates@microsoft.com", company: "Microsoft" } )
db.users.insert( { username: "steve.jobs", password: "mac", email: "stevejobs@apple.com", company: "Apple" } );

Если я запускаю сервер с включенным [BLOCK 2]:

$ ts-node server.ts

Я получаю следующий вывод:

Hello World !!!
[ { _id: 5b3561bbcde3135b908cb51b,
    username: 'bill.gates',
    password: 'windows',
    email: 'billgates@microsoft.com',
    company: 'Microsoft' },
  { _id: 5b3561c1cde3135b908cb51c,
    username: 'steve.jobs',
    password: 'mac',
    email: 'stevejobs@apple.com',
    company: 'Apple' } ]

Но если я запускаю сервер с включенным [BLOCK 1]:

Я просто получаю следующий вывод:

Hello World !!!

без предыдущих записей.

Единственное различие, которое я вижу между обоими способами, заключается в том, где определяются интерфейсы, схема и модель.

РЕДАКТИРОВАТЬ 1

Я провел несколько экспериментов:

С way 1 и way 3, упомянутыми выше, если я сделаю:

$ cd ./server/
$ tsc server.ts
$ node server.js

тогда я получаю ожидаемый результат .

Но с way 2, упомянутым выше, если я сделаю:

$ cd ./server/
$ tsc server.ts

Я получаю следующий вывод:

node_modules/@types/mongoose/index.d.ts(61,9): error TS2300: Duplicate identifier 'NativeBuffer'.
node_modules/@types/mongoose/index.d.ts(62,9): error TS2300: Duplicate identifier 'NativeDate'.
node_modules/@types/mongoose/index.d.ts(63,9): error TS2300: Duplicate identifier 'NativeError'.
node_modules/@types/mongoose/index.d.ts(71,14): error TS2300: Duplicate identifier 'Mongoose'.
node_modules/@types/mongoose/index.d.ts(72,8): error TS2300: Duplicate identifier 'Mongoose'.
node_modules/@types/mongoose/index.d.ts(156,9): error TS2300: Duplicate identifier 'CastError'.
node_modules/@types/mongoose/index.d.ts(177,18): error TS2300: Duplicate identifier 'ConnectionBase'.
node_modules/@types/mongoose/index.d.ts(447,9): error TS2300: Duplicate identifier 'Connection'.
node_modules/@types/mongoose/index.d.ts(463,9): error TS2300: Duplicate identifier 'ValidationError'.
node_modules/@types/mongoose/index.d.ts(472,9): error TS2300: Duplicate identifier 'Error'.
node_modules/@types/mongoose/index.d.ts(562,9): error TS2300: Duplicate identifier 'VirtualType'.
node_modules/@types/mongoose/index.d.ts(579,9): error TS2300: Duplicate identifier 'Schema'.
node_modules/@types/mongoose/index.d.ts(888,5): error TS2374: Duplicate string index signature.
node_modules/@types/mongoose/index.d.ts(1018,5): error TS2374: Duplicate string index signature.
node_modules/@types/mongoose/index.d.ts(1072,13): error TS2300: Duplicate identifier 'MongooseDocument'.
node_modules/@types/mongoose/index.d.ts(1073,9): error TS2300: Duplicate identifier 'MongooseDocument'.
node_modules/@types/mongoose/index.d.ts(1275,11): error TS2300: Duplicate identifier 'Subdocument'.
node_modules/@types/mongoose/index.d.ts(1291,11): error TS2300: Duplicate identifier 'Array'.
node_modules/@types/mongoose/index.d.ts(1400,11): error TS2300: Duplicate identifier 'DocumentArray'.
node_modules/@types/mongoose/index.d.ts(1429,11): error TS2300: Duplicate identifier 'Buffer'.
node_modules/@types/mongoose/index.d.ts(1461,10): error TS2300: Duplicate identifier 'ObjectIdConstructor'.
node_modules/@types/mongoose/index.d.ts(1469,11): error TS2300: Duplicate identifier 'Decimal128'.
node_modules/@types/mongoose/index.d.ts(1475,11): error TS2300: Duplicate identifier 'Embedded'.
node_modules/@types/mongoose/index.d.ts(1515,9): error TS2300: Duplicate identifier 'Query'.
node_modules/@types/mongoose/index.d.ts(1516,9): error TS2300: Duplicate identifier 'DocumentQuery'.
node_modules/@types/mongoose/index.d.ts(1948,9): error TS2300: Duplicate identifier 'mquery'.
node_modules/@types/mongoose/index.d.ts(2000,13): error TS2300: Duplicate identifier 'Schema'.
node_modules/@types/mongoose/index.d.ts(2248,9): error TS2300: Duplicate identifier 'Aggregate'.
node_modules/@types/mongoose/index.d.ts(2411,9): error TS2300: Duplicate identifier 'SchemaType'.
node_modules/@types/mongoose/index.d.ts(2864,5): error TS2374: Duplicate string index signature.
node_modules/@types/mongoose/index.d.ts(2966,5): error TS2374: Duplicate string index signature.

Я думаю, что есть конфликты, потому что каталог: ./models/ имеет свой собственный каталог node_modules.

Как вы думаете, есть ли способ НЕ включать зависимости:
{mongoose, @types/mongoose} в каталоге ./server/ и просто сделайте это в каталоге ./models/, чтобы предотвратить эти конфликты?

Есть идеи, как заставить way 2 работать?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...