Javascript 已添加MongoDB文档,但未在网站上显示(未刷新)

Javascript 已添加MongoDB文档,但未在网站上显示(未刷新),javascript,node.js,mongodb,mongodb-query,Javascript,Node.js,Mongodb,Mongodb Query,我有一个简单的待办事项列表网站。因此,您可以创建待办事项列表,并从列表中添加和删除项目。也就是说,有一个列表集合和一个项目集合,其中列表可以包含许多项目(项目数组)。我已经将我的Mongoose(MongoDB)代码分割成一个单独的文件(model.js),我的app.js文件是处理所有HTTP请求的地方。导入到app.js中的所有Mongoose方法都工作正常。 问题是当我将项目添加到列表时,通过按网站上的+按钮,它应该会在列表中显示新项目 但是,在我按下+按钮后,该项目仍然没有显示在列表中

我有一个简单的待办事项列表网站。因此,您可以创建待办事项列表,并从列表中添加和删除项目。也就是说,有一个
列表
集合和一个
项目
集合,其中
列表
可以包含许多
项目
(项目数组)。我已经将我的Mongoose(MongoDB)代码分割成一个单独的文件(
model.js
),我的
app.js
文件是处理所有HTTP请求的地方。导入到
app.js
中的所有Mongoose方法都工作正常。 问题是当我将
项目添加到
列表
时,通过按网站上的
+
按钮,它应该会在列表中显示新项目

但是,在我按下
+
按钮后,该项目仍然没有显示在列表中。网站需要刷新才能显示。该项确实成功添加到数据库中,因为我可以通过控制台日志和检查数据库本身来确认这一点

+
按钮触发
app.js
文件中的
app.post('/')…
方法,以便将项目添加到列表中

我的下一个方法是,使用
Promise
addItemToListInDB
方法(在
model.js
文件中),并使用
Async
wait
这将确保在呈现网页之前将项目添加到数据库中。但是,这种方法还有另一个问题。我没有返回更新列表的值(使用新添加的项目),而是得到
[对象承诺]
。无论如何,
承诺
异步
等待
仍然没有解决原始问题。不确定在这种情况下是否需要承诺

请参考我下面的代码(另外,为了简洁起见,我只包含了
app.get('/'.
(Home route方法)和
app.post('/'.
(adding items方法)(来自
app.js
文件)。以及
model.js
中的adding items方法)

另外,对于所有控制台日志,我提前表示歉意,但我正在尝试调试这个问题。我不想被异步等待执行顺序弄糊涂

app.js

const express=require('express');
const bodyParser=require('body-parser');
const date=require(`${uu dirname}\\date.js`);
const model=require(`${uu dirname}\\model.js`);
const ejs=require('ejs');
const=require('lodash');
常量app=express();
use(bodyParser.urlencoded({extended:true}));
应用程序集(“查看引擎”、“ejs”);
应用程序使用(express.static('public'));
应用程序获取(“/”,(请求,请求)=>{
const defaultListName=“今天的”;
const todayFormatted=date.getDate();
model.DBUtility.findOneList(defaultListName,(foundList)=>{
如果(!foundList){
model.DBUtility.createNewListInDB(defaultListName);
res.redirect('/');
}否则{
res.render('列表'{
listTitlePassToH1:foundList.name,
今天日期:今天,
listItems:foundList.items
});
}
});
});
应用程序发布(“/”,(请求,回复)=>{
const receivedItem=req.body.newItem;
const listName=req.body.listName;
log(`model.DBUtility.addItemToListAndGetUpdatedList(listName,receivedItem)`)之前);
const updatedList=model.DBUtility.addItemToListAndGetUpdatedList(listName,receivedItem);
log(`After model.DBUtility.addItemToListAndGetUpdatedList(listName,receivedItem)`);
log(`updatedList:${updatedList}`);
如果(listName==“今天的”){
res.redirect('/');
}否则{
res.redirect('/'+listName);
} 
});
常数端口=3000;
应用程序侦听(端口,()=>{
log(`Server started,监听端口:${port}`);
});
model.js

const mongoose=require('mongoose');
const=require(“lodash”);
//连接到数据库
mongoose.connect('mongodb+srv://:.mongodb.net/database',{useNewUrlParser:true,useUnifiedTopology:true,UseFindModify:false});
//创建模式
const itemschema=newmongoose.Schema({
名称:String
});
const listSchema=新的mongoose.Schema({
名称:String,
项目:[itemschema]
});
const Item=mongoose.model('Item',itemschema);
const List=mongoose.model('List',listSchema);
类DBUtility{
//***DB实用程序方法
静态addItemToListInDB(listName,itemName){
返回新承诺((解决、拒绝)=>{
List.findOne({name:listName},(err,foundList)=>{
如果(错误){
控制台日志(err);
拒绝(错误);
}否则{
foundList.items.push({name:itemName});
foundList.save(错误=>{
如果(错误){
控制台日志(err);
}否则{
log(`Item${itemName}已成功添加到列表${foundList.name}中。`);
解决(发现名单);
}
});
}  
});
});
}
静态异步addItemToListAndGetUpdatedList(listName,itemName){
试一试{
const updatedList=await DBUtility.addItemToListInDB(listName,itemName);
log(`inside addItemToListAndGetUpdatedList.updatedList${updatedList}`);
返回更新列表;
}捕捉(错误){
控制台日志(err);
}  
}
}
exports.DBUtility=DBUtility;
终端中的输出:

Server started, listening on port: 3000
before model.DBUtility.addItemToListAndGetUpdatedList(listName, receivedItem) 
After model.DBUtility.addItemToListAndGetUpdatedList(listName, receivedItem) 
updatedList: [object Promise]
Item Cheese added to list Shopping successfully. 
inside addItemToListAndGetUpdatedList. updatedList { 
  _id: 5e9cb7b45ceafe2440e09995,
  name: 'Shopping',
  items: [
    { _id: 5e9cb7c45ceafe2440e09999, name: 'Bread' },
    { _id: 5e9cb7cc5ceafe2440e0999a, name: 'Lemons' },
    { _id: 5e9cb7d25ceafe2440e0999b, name: 'Eggs' },
    { _id: 5e9cb7ea5ceafe2440e0999d, name: 'Butter' },
    { _id: 5e9cbd585ceafe2440e0999e, name: 'Cheese' }
  ],
  __v: 6
}

有一件事要提,我希望这不是在转移视线,当我在我的计算机上本地托管MongoDB时,我不记得有过这个问题。但是当我转到MongoDB Atlas云托管时,似乎问题开始出现了。

为什么会出现错误:

出现此错误是因为在post请求处理程序中,更新列表集合(
model.D)的db操作
// Note the async keyword used before the request handler function
app.post('/', async (req, res) => {
  const receivedItem = req.body.newItem;
  const listName = req.body.listName;
  // The await keyword below ensures the update operation completes
  // before moving to the next statement
  const updatedList = await model.DBUtility.addItemToListAndGetUpdatedList(listName, receivedItem);
  if (listName === "Today's") {
    res.redirect('/');
  } else {
    res.redirect('/' + listName);
  } 
});