如何在 angular2/浏览器上使用猫鼬

Posted

技术标签:

【中文标题】如何在 angular2/浏览器上使用猫鼬【英文标题】:How to use mongoose on angular2/browser 【发布时间】:2017-02-02 15:01:53 【问题描述】:

我是 MEAN 的新手,想寻求您的帮助。

由于我在服务器端使用 Mongoose 并且有很多架构,我想在表单输入中重用 Angular2 浏览器端的架构。由于 Mongoose 现在是同构的,我认为它应该是可行的。如果可能的话,我想在客户端使用 Mongoose/Angular2 的模式、文档和验证。我不会从浏览器连接到数据库。

问题1:如何在浏览器端使用Mongoose?

我四处浏览并认为这种方法可能不正确。

    npm install mongoose --save typings install --global --save dt~mongoose(还有 mpromise、mongoose-promise、mongodb、node) 在 app.module.ts 上,将 * 作为 mongoose 从 'mongoose' 导入; 将那些 ....\typings\globals* 复制到 ....\node_modules(不确定我是否需要此步骤,但只需尝试一下)

当我执行“ng s”时,我得到了这些错误。

问题 2:如何解决以下这些错误?我还尝试了 npm install --save 事件、npm install --save 流并输入它们。

[默认] D:\MEAN\projects\fhir\fhirapp\node_modules\mongodb\index.d.ts:4:29 中的错误 找不到模块“事件”。

[默认] D:\MEAN\projects\fhir\fhirapp\node_modules\mongodb\index.d.ts:102:18 中的错误 找不到名称“缓冲区”。

[默认] D:\MEAN\projects\fhir\fhirapp\node_modules\mongodb\index.d.ts:1127:44 中的错误 找不到命名空间“NodeJS”。

[默认] D:\MEAN\projects\fhir\fhirapp\node_modules\mongoose\index.d.ts:6:26 中的错误 找不到模块“流”。

[默认] D:\MEAN\projects\fhir\fhirapp\node_modules\mongoose\index.d.ts:13:29 中的错误 找不到名称“全球”。

我的打字.json


  "globalDependencies": 
    "mongodb": "registry:dt/mongodb#2.1.0+20160602142941",
    "mongoose": "registry:dt/mongoose#4.5.9+20160922172925",
    "mongoose-promise": "registry:dt/mongoose-promise#4.5.4+20160822161941",
    "mpromise": "registry:dt/mpromise#0.5.4+20160316155526",
    "node": "registry:dt/node#6.0.0+20160923124626"
  

非常感谢您的帮助。 提前致谢。

【问题讨论】:

您不需要将任何内容从typings 文件夹复制到node_modules 您好,WiredPrairie,谢谢您的确认。我正在考虑将相应的 index.d.ts 复制到每个 node_modules/module_name。 【参考方案1】:

安装 TypeScript 2.0.3(如果您正在使用 Angular 2.0+,则应该使用),我使用了以下 package.json

npm install mongoose core-js --save
npm install @types/mongoose @types/core-js @types/node typescript --save-dev


  "name": "***_mongoose",
  "version": "1.0.0",
  "description": "test",
  "main": "index.js",
  "license": "ISC",
  "dependencies": 
    "core-js": "^2.4.1",
    "mongoose": "^4.6.1"
  ,
  "devDependencies": 
    "@types/core-js": "^0.9.34",
    "@types/mongoose": "^4.5.36",
    "@types/node": "^6.0.41",
    "typescript": "^2.0.3"
  

我创建了一个tsconfig.json 文件:


    "compilerOptions": 
        "module": "commonjs",
        "target": "es5",
        "noImplicitAny": false,
        "sourceMap": false
    , 
    "exclude": [
        "node_modules"
    ]

还有一个示例文件,index.ts

import * as mongoose from "mongoose";

mongoose.connect("sample");

没有编译错误。您不再需要使用typings。相反,您可以使用@types

【讨论】:

您好,WiredPrairie,非常感谢!!!添加这些建议的模块和@type 后,问题就解决了。但是,我没有 npm @type/core-js 导致很多错误,例如 [default] D:\...\node_modules\typescript\lib\lib.es2015.core.d.ts 中的 ERROR: 17:13 重复标识符“PropertyKey”。 [默认] D:\..\node_modules\@types\core-js\index.d.ts:21:13 重复标识符“PropertyKey”中的错误。 不知道你为什么删除你的问题,如果你给我机会我会寻找别的东西。我知道问题是因为 unicode 的排序方式不同。试试看这篇文章。 support.microsoft.com/en-us/kb/322112 。 PD:我只给第一个重复的,你知道我只能给一个。但第二个有一些有趣的评论也可能对你有所帮助。 好吧,即使标记为重复,您也可以通过编辑您的问题并解释为什么不同来要求重新打开。阅读您的评论后,我将改变我的投票。再次抱歉给您带来不便。

以上是关于如何在 angular2/浏览器上使用猫鼬的主要内容,如果未能解决你的问题,请参考以下文章

如何在Angular 2中禁用浏览器后退按钮

Angular2:如何从子组件调用主组件功能

使用 Ionic 包装 Angular2 应用程序 - 地理定位问题

IE中的angular2慢和core-js的使用

Angular 2. 在共享主机上运行

我可以只在使用 Angular2 Universal 的客户端中运行组件方法吗?