Javascript 导出Node.js中的Mongoose代码-将值从Mongoose方法传递到回调
我有两个JS文件: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代码时,出现了一个错误 网站的概念是,它显示一个待办事项清单,列表的标题是“今天的”列表。因此,在数据库中有一个模型列表,它有一个名称字段/属性和一个项数组(检查表项)字段/属性 这个想法是,当网站加载时,主页会显示今天的待办
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
etfoundList
从查询结果返回,只需将其分配给var。然后将该var传递给回调。即使var的值保持为null
,回调也可以将该值传递回,而不会出现任何问题。因此,您已经解决了我的部分问题,我将用绿色勾号标记您的解决方案:)好吧,问题不是关于第二个逻辑错误,但是我很高兴能够帮助您解决语法错误。编码快乐!