Javascript 导出Node.js中的Mongoose代码-将值从Mongoose方法传递到回调

Javascript 导出Node.js中的Mongoose代码-将值从Mongoose方法传递到回调,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有两个JS文件:app.JS具有HTTP API方法处理程序,和model.JS包含Mongoose(MongoDB)方法,将由app.JSHTTP方法调用/使用。以前,当我将所有代码放在一个文件(app.js)中时,它工作得非常好。但当我将其拆分为单独的Mongoose代码时,出现了一个错误 网站的概念是,它显示一个待办事项清单,列表的标题是“今天的”列表。因此,在数据库中有一个模型列表,它有一个名称字段/属性和一个项数组(检查表项)字段/属性 这个想法是,当网站加载时,主页会显示今天的待办

我有两个JS文件:
app.JS
具有HTTP API方法处理程序,和
model.JS
包含Mongoose(MongoDB)方法,将由
app.JS
HTTP方法调用/使用。以前,当我将所有代码放在一个文件(
app.js
)中时,它工作得非常好。但当我将其拆分为单独的Mongoose代码时,出现了一个错误

网站的概念是,它显示一个待办事项清单,列表的标题是“今天的”列表。因此,在数据库中有一个模型
列表
,它有一个
名称
字段/属性和一个
项数组
(检查表项)字段/属性

这个想法是,当网站加载时,主页会显示今天的待办事项列表。它首先在数据库中进行检查,如果有一个名为
的列表对象,它会在主页中呈现它,否则它会在呈现主页之前,通过调用
model.js
文件中的方法来创建这个列表对象

因此,这些步骤是:

1-在
app.js
中,
app.get(“/”…
方法调用
model.js
中的
List.findOne
Mongoose方法,首先检查数据库中是否存在
今天的
列表对象

2-如果
List.findOne
找到了
今天的
列表对象,我需要将
今天的
列表对象传递给一个
回调
,这样它就可以在
app.get('/')…
方法中接收,该方法将使用它来呈现主页

3-但是,如果
List.findOne
没有找到
今天的
列表对象,那么我需要将其他内容传递回
回调
,比如null、字符串
“null”
或指示列表对象
今天的
未找到的内容。这样
app.get(“/”…
方法将在
回调中接收指示“未找到列表”的内容,并调用另一个Mongoose方法来创建
今天的
列表对象

但是,我只是得到了一个错误,而不能将任何内容传递给
回调

错误:

[nodemon] starting `node app.js`
Server started, listening on port: 3000
list not found
events.js:288
      throw er; // Unhandled 'error' event
      ^

ReferenceError: _ is not defined
    at Function.createNewListInDB (C:\Users\hazzaldo\Desktop\...\todolist-v2\model.js:72:29)
    at C:\Users\hazzaldo\Desktop\...\todolist-v2\app.js:22:23
    at C:\Users\hazzaldo\Desktop\...\todolist-v2\model.js:38:17
    at C:\Users\hazzaldo\Desktop\...\todolist-v2\node_modules\mongoose\lib\model.js:4849:16
    at C:\Users\hazzaldo\Desktop\...\todolist-v2\node_modules\mongoose\lib\model.js:4849:16
    at C:\Users\hazzaldo\Desktop\...\todolist-v2\node_modules\mongoose\lib\helpers\promiseOrCallback.js:24:16
    at C:\Users\hazzaldo\Desktop\...\todolist-v2\node_modules\mongoose\lib\model.js:4872:21
    at C:\Users\hazzaldo\Desktop\...\todolist-v2\node_modules\mongoose\lib\query.js:4379:11
    at C:\Users\hazzaldo\Desktop\...\todolist-v2\node_modules\kareem\index.js:135:16
    at processTicksAndRejections (internal/process/task_queues.js:79:11)
Emitted 'error' event on Function instance at:
    at C:\Users\hazzaldo\Desktop\...\todolist-v2\node_modules\mongoose\lib\model.js:4851:13
    at C:\Users\hazzaldo\Desktop\...\todolist-v2\node_modules\mongoose\lib\helpers\promiseOrCallback.js:24:16
    [... lines matching original stack trace ...]
    at processTicksAndRejections (internal/process/task_queues.js:79:11)
[nodemon] app crashed - waiting for file changes before starting...
这是我的密码:

model.js:

const mongoose=require('mongoose');
//创建数据库
猫鼬mongodb://localhost:27017/todolistDB“,{useNewUrlParser:true,useUnifiedTopology:true,UseFindModify:false});
//创建模式
const itemschema=newmongoose.Schema({
名称:String
});
const listSchema=新的mongoose.Schema({
名称:String,
项目:[itemschema]
});
//创建模型(又名集合)(相当于SQL中的表))
const Item=mongoose.model('Item',itemschema);
const List=mongoose.model('List',listSchema);
类DBUtility{
构造函数(){
log(“构造函数类DBUtility”);
}
//***DB实用程序方法
静态findOneList(列表名,回调){
List.findOne({name:listName},(err,foundList)=>{
如果(错误){
log(`Error:${err}`);
}如果(!foundList),则为else{
console.log(“未找到列表”);
常量值='null'
回调(值);
}否则{
log(`found list.`);
回调(foundList)
}
});
}
静态createNewListInDB(listName){
//为新列表创建默认项
const introItem=新项目({
姓名:“欢迎来到你的托多利斯特!”
});
const addItem=新项目({
name:'点击+按钮添加新项目。'
});
const deleteItem=新项目({

名称:“我不确定这是否可行,但我以前遇到过这个问题。请尝试在您的
model.js
文件中要求使用lodash:
const=require(“lodash”)

更正,实际上这是问题的一部分。事实上,我在
静态createNewListInDB
方法中使用了
lodash
api,甚至没有包含
const=require(“lodash”)愚蠢的错误。另一个问题是,在
静态findOneList
方法中,为了从查询结果中传递
foundList
值,即使没有找到列表,即
null
是值,为此,我需要在方法中创建
var
,并将其初始化为
null
et
foundList
从查询结果返回,只需将其分配给var。然后将该var传递给回调。即使var的值保持为
null
,回调也可以将该值传递回,而不会出现任何问题。因此,您已经解决了我的部分问题,我将用绿色勾号标记您的解决方案:)好吧,问题不是关于第二个逻辑错误,但是我很高兴能够帮助您解决语法错误。编码快乐!