发布没有“_id”字段的 TypeScript 对象?

Posted

技术标签:

【中文标题】发布没有“_id”字段的 TypeScript 对象?【英文标题】:Post TypeScript Object without '_id' field? 【发布时间】:2017-01-27 06:31:48 【问题描述】:

我使用 Express、Mongoose 和 Angular 2 (TypeScript) 制作网络应用程序。现在我想发布一个没有任何_id 字段的MyClass 实例。

在 mongoose 中,我们可以使用 _id 在 mongoDB 上做很多操作,所以这是我在服务器端使用 mongoose 所做的事情

  router.post('/', function(req, res, next) 
  Package.create(req.body, function (err, post) 
    if (err) return next(err);
        res.json(post);
  );
);


/* GET /package/id */
router.get('/:id', function(req, res, next) 
  Package.findById(req.params.id, function (err, post) 
    if (err) return next(err);
    res.json(post);
  );
);

/* PUT /package/:id */
router.put('/:id', function(req, res, next) 
  Package.findByIdAndUpdate(req.params.id, req.body, function (err, post, after) 
    if (err) return next(err);

    res.json(post);
  );
);

为了包含 _id 字段,我创建了一个这样的 ts 类:

export class Package


    constructor(
        public guid: string,
        ...
        [other fields]
        ...
        public _id: string
    )


请注意末尾的_id

在我的 Angular 2 服务中,我这样做是为了将 json 对象发布到服务器

//create new pakcage
    private post(pck: Package): Promise<Package> 
        let headers = new Headers(
            'Content-Type': 'application/json'
        );

        return this.http
            .post(this.packageUrl, JSON.stringify(pck),  headers: headers )
            .toPromise()
            .then(res => res.json())
            .catch(this.handleError);

    

然后我收到如下截图所示的错误:

其中表示我发回的对象有一个空的_id 字段。

如何发布没有 _id 字段的 ts 类,还是应该完全不同?

【问题讨论】:

【参考方案1】:

由于没有人给出答案,我上网找到了一个很好的例子,说明如何实现 Angular2 -- Mongoose -- Express 系统。

https://github.com/moizKachwala/Angular2-express-mongoose-gulp-node-typescript

官方教程中原始英雄应用程序的一个很好的例子。虽然它基于 RC1,但它为如何正确执行 RESTFUL 请求提供了一个很好的起点。

希望这对正在寻找类似答案的人有所帮助。

【讨论】:

以上是关于发布没有“_id”字段的 TypeScript 对象?的主要内容,如果未能解决你的问题,请参考以下文章

(节点:17348)UnhandledPromiseRejectionWarning:MongoError:对路径“_id”执行更新将修改不可变字段“_id”

mongoose 和 typescript 如何自动将 '_id' 转换为 'id'?

Mongoose 检索没有 _id 字段的数据

Mongo:引用同一集合中另一个文档的_id字段

Mongoose - 如何替换 _id 作为主索引?

有没有办法在 TypeScript 的界面中记录字段?