node.js - 类型 'x' 上不存在 Mongoose 属性 'Document'

标签 node.js mongodb express typescript

ts 编译器说“文档”类型上不存在任何属性。

似乎正因为如此,模型上的所有属性都无法设置。 如果我将用户对象打印到控制台,我得到的只是 {"_id":"长十六进制 ID 号"}

我的模型配置如下:

用户.ts

import * as mongoose from 'mongoose';
import * as crypto from 'crypto';
import * as jwt from 'jsonwebtoken';

var userSchema = new mongoose.Schema({
    email: {
        type: String,
        unique: true,
        required: true
    },
    firstMidname: {
        type: String,
        required: true
    },
    lastName: {
        type: String,
        required: true
    },
    hash: String,
    salt: String
});

userSchema.methods.setPassword = setPassword;


userSchema.methods.validPassword = validPassword;

userSchema.methods.generateJwt = generateJwt;

export = mongoose.model('User', userSchema);

API连接点 api.ts

import * as express from    'express';
import * as mongoose from   'mongoose';
import * as passport from   'passport';

var User = mongoose.model('User');

var router = express.Router();

router.post('/', createUser);

function createUser(req, res){
var user = new User();
    console.log(user);
    user.firstMidName = req.body.firstName;
    user.lastName = req.body.lastName;
    user.setPassword(req.body.password);

    user.save((err) => {
        console.log("saving user");
        var token;
        token = user.generateJwt();
        res.status(200);
        res.json({
            'token': token
        });
    });
}

export = router;

如何修复或解决此问题? user.save block 中的任何内容都不会执行。

编辑: 这两件事似乎无关。我现在可以保存到数据库,但是 typescript 错误仍然存​​在。这是预期的行为吗?

最佳答案

mongoose.model方法接受默认为 mongoose.Document 的类型,它不会在您的 User 上具有您想要的属性文档。

要解决此问题,请创建一个接口(interface)来描述您的模式并扩展 mongoose.Document :

export interface UserDoc extends mongoose.Document {
  email: {
    type: string;
    unique: boolean;
    required: boolean;
  }
  ...
}

然后,将其作为模型的类型传递:

export = mongoose.model<UserDoc>('User', userSchema);

关于node.js - 类型 'x' 上不存在 Mongoose 属性 'Document',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42275358/

相关文章:

node.js - Node gyp:gyp 错误!无法加载共享libpython2.7.so.1.0

MongoDB .NET 驱动程序和文本搜索

mongodb - 错误 : unable to recognize "mongo-statefulset.yaml": no matches for kind "StatefulSet" in version "apps/v1beta1"

javascript - EJS 找不到包含包含文件

ios - Apple Pay - "Payment Not Completed"- 使用 Stripe

node.js - 少 : command not found (terminal)

node.js - 在 node.js 中使用 passport-local 和 bcrypt 检查和更新密码

node.js - 由于 require-from-string 导致使用 npm 安装 Angular 时出错

node.js - mongoDB + NodeJS : can't keep a stream cursor open

node.js - MongoDB:如何使用 expressjs 读取所有集合中的所有文档?