commonjs写js文件没有导出也可以require引入吗?

我写的node+mongoose项目,models文件夹下存放定义mongoose 模块的代码,如果我写了module.exports= 导出的话node就报错,

下面是一个model

const mongoose = require('mongoose')
const Schema = mongoose.Schema
const mongoosePaginate = require('mongoose-paginate')

// 表单模板
/**
*fieldType:
单行文本框 (input)text
多行文本框 textarea
数字 (input)number
邮箱地址 (input)email
日期 (input)date
单选按钮  (input)radio
复选框 (input)checkbox
下拉列表框 select
表格 table
文件 (input)file(url)
*/
const FormModelSchema = new Schema({
    formName: String,
    instruction: String,
    userName: String,
    updateUserName: String,
    userId:String,
    updateUserId: String,
    createAt: {type: Date, default: Date.now},
    updateAt: {type: Date, default: Date.now},
    formFields: [{
        displayName: String,
        // fieldName:String,
        fieldType: String,
        placeholder:String,
        isRequired:{type: Boolean, default: false},
        value:String,
        column:String,
        fieldOptions:[{
            displayText:String,
        }],
        fieldOrder:Number
        //图片 or 文件  限制图片/文件大小
        // maxSize:String, 文字长度
    }]
})
// Defines a pre hook for the document.
FormModelSchema.pre('save', function(next) {
    if (this.isNew) {
        this.createAt = this.   updateAt = Date.now()
    }
    else {
        this.updateAt = Date.now()
    }
    next()
})
FormModelSchema.plugin(mongoosePaginate)

var FormModel=mongoose.model('FormModel', FormModelSchema)
module.exports=FormModel

这是报错信息:

clipboard.png

但是如果我不导出,反而不会报错,这是什么原因呢?app.js中就是直接require 引入models文件夹下的js文件。

问题二:
在不导出的前提下,我另一个model代码结构和定义以及保存的方法都跟这个几乎是一样的,但是另一个就可以正常存数据,这个文件就不可以存,每次一调用存数据的接口就说formModel 不存在。这又是什么原因呢?

下面是我调用该model的代码:

'use strict'

var mongoose = require('mongoose')
const FormModel = mongoose.model('FormModel')

exports.createFormModel = async(data) => {
    let FormModel = new FormModel(data)
    let flag = false
    await FormModel.save(function (err) {
        if (err) {
            flag = false
            return console.error(err)
        }else{
            flag=true
        }
    })
    return flag
}
exports.updateFormModel = async(data) => {
    let FormModel = new FormModel(data)
    let flag = false
    await FormModel.update(function (err) {
        if (err) {
            flag = false
            return console.error(err)
        }else{
            flag=true
        }
    })
    return flag
}

这是报错:

clipboard.png

阅读 3.1k
2 个回答

没用过 Mongoose,怎么错一眼看不出,不调试一下也不知道。不过不导出就相当于不执行,所以不报错是正常的。题主还是想办法除错吧,并且仔细读一读文档。没有错误除不掉,也只有踏踏实实除错才有机会获得提升。

对于在不导出的前提下,我另一个model代码结构和定义以及保存的方法都跟这个几乎是一样的,但是另一个就可以正常存数据,这个文件就不可以存,每次一调用存数据的接口就说formModel 不存在。我找到了原因,是因为我创建FormModel实例的时候变量名称跟这个冲突了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题