User.findByID 不是函数

jmr*_*eda 2 mongoose node.js express

我在节点+快速路由方面遇到问题。我在 IDE webstorms 中默认提供了一个路由架构。我不确定我是否配置好了一切,因为我遇到了这个错误。

我可以正确执行 GET /users 和 POST /users,并在邮递员上获得正确的结果。

路线/user.js

const express = require('express');
const router = express.Router();
const _ = require('lodash');
const {ObjectID} = require('mongodb');

const {mongoose} = require('../db/mongoose')
const {User} = require('../db/models/users')
const {Project} = require('../db/models/projects')
const {Dialog} = require('../db/models/dialogs')

(...)

router.get('/users/:userid', (req, res) => {
    var id = req.params.userid.toString();

    if (!ObjectID.isValid(id)) {
        return res.status(404).send();
    }

    User.findByID(id).then((user) => {
        if (!user) {
            return res.status(404).send();
        }

        res.send({user});
    }).catch(() => {
        res.status(404).send();
    });
});
Run Code Online (Sandbox Code Playgroud)

模型/user.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema

// todo refactor userschema with proper validators (view udemy course)

const UserSchema = new Schema({
    email: {type: String, required: true},
    password: {type: String, required: true},
    name: {type: String},
    company: {type: String},
    phone: {type: String},
    projects: [{type: Schema.Types.ObjectId, ref: 'Project'}]
});


const User = mongoose.model('User', UserSchema);

module.exports = {User}
Run Code Online (Sandbox Code Playgroud)

小智 5

麦基是对的。Mongoose 模型函数是 findById() 而不是 findByID() - http://mongoosejs.com/docs/api.html#model_Model.findById

  • 非常感谢你,它成功了。我觉得这真的很愚蠢。实际上,webstorms ide 建议使用 findByID:https://pasteboard.co/H0jrCRO.png (2认同)