Node.js TypeScript、NodeJs/Express和Mongo(与VS 2013一起)
我正在尝试创建一个基于节点(和Express)的应用程序,它在功能上类似于使用Mongo作为数据存储的WebAPI应用程序。我正在尝试使用TypeScript(还有VS2013) 我已经让它工作了,现在我正在努力清理它 首先,Express 4.1.1是可用的,但它没有打字功能 第二,访问Mongo的正确方法是什么——建立连接和查询集合——以使其与Node希望的方式异步(所以我没有阻塞,等等)?我应该使用q/承诺吗 第三,在这个设置中,访问另一个文件中的方法的正确方式是什么?我已经为导入/导出/需求/模块/类绞尽脑汁了一段时间,想得到我认为还行的东西,但要做到这一点真是太痛苦了。以下是我所拥有的: app.ts,带有一些导入等和参考Node.js TypeScript、NodeJs/Express和Mongo(与VS 2013一起),node.js,express,typescript,Node.js,Express,Typescript,我正在尝试创建一个基于节点(和Express)的应用程序,它在功能上类似于使用Mongo作为数据存储的WebAPI应用程序。我正在尝试使用TypeScript(还有VS2013) 我已经让它工作了,现在我正在努力清理它 首先,Express 4.1.1是可用的,但它没有打字功能 第二,访问Mongo的正确方法是什么——建立连接和查询集合——以使其与Node希望的方式异步(所以我没有阻塞,等等)?我应该使用q/承诺吗 第三,在这个设置中,访问另一个文件中的方法的正确方式是什么?我已经为导入/导出/
/// <reference path='./scripts/typings/node/node.d.ts' />
import express = require('express');
import http = require('http');
import path = require('path');
import badgeApi = require('./routes/api/Badge');
var app = express();
...
new badgeApi.Badge();
app.get('/badge', badgeApi.Badge.ListAll);
...
现在我知道这完全不起作用了——ConnectDataStore是错误的(它不会像预期的那样返回Db)。当我注意到我使用的是express 3.5.2,而不是4.1.1时,我开始通过让它返回一个承诺来解决这个问题,最终我明白了——这个东西不是很可靠
当然,我可能遗漏了什么,但我不知道是什么
任何关于这汤的指示都将不胜感激 在出现Express 4+的定义文件之前,我建议您使用JavaScript作为应用程序的核心(因为它不需要太多更改),并使用TypeScript作为应用程序逻辑(控制器等)。在Node.JS中,很容易混合和匹配 我会承诺处理MongoDB连接,或者尽早建立连接,直到成功建立MongoDB连接,应用程序才真正开始为网页提供服务
Express的3.0打字可能在许多地方与4+版本配合使用,因为签名通常是相同的。(我认为您这里有太多不相关的问题,无法实际回答)。#1)我建议在Express部分使用JavaScript来开始工作。对于express可能需要的少量代码,使用TypeScript没有什么好处。话虽如此,您可能会发现Express 3.1的打字功能对于4.1+来说已经足够好了,可以毫无问题地工作。这是一个公平的观点。我很乐意接受你迄今为止提供的答案以及链接/解释,如果导入和模块等合理使用,或者告诉我我所拥有的是正确的。“新”-定义那个类似乎是错误的。@wiredparie-让我们再来一次。按照“混合使用javascript/typescript,简单的东西使用js,只在有用的地方使用ts,比如控制器”的思路创建一个答案,我会接受它。
/// <reference path='../../scripts/typings/mongodb/mongodb.d.ts' />
import util = require('util');
import mongodb = require('mongodb');
export var ConnectDataStore: (dbname: string, dbuser: string, dbpass: string) => mongodb.Db;
ConnectDataStore = (dbname: string, dbuser: string = 'xxxx', dbpass: string = 'xxxx') => {
var baseMongoConnect: string = 'xxxx';
var mongoConnect = util.format(baseMongoConnect, dbuser, dbpass, dbname);
var DB: mongodb.Db;
mongodb.MongoClient.connect(mongoConnect, (err, db) => {
if (!err) {
DB = db;
return DB;
}
else {
throw err;
}
});
}
import util = require('util');
import express = require('express');
import mongodb = require('mongodb');
import datastore = require('./DataStore');
export class Badge {
private static DB: mongodb.Db = null;
constructor() {
Badge.DB = datastore.ConnectDataStore('credential', 'xxxx', 'xxxx')
}
public static ListAll(req: express.Request, res: express.Response): void {
Badge.DB.collection('badge', (collErr, coll) => {
coll.find().toArray((arrayErr, badges) => {
if (badges.length > 0) {
res.jsonp(200, badges);
}
else {
res.send(200, 'No Badges');
}
});
});
}
}