简单的待办事项应用程序只是不打印待办事项

时间:2020-05-16 22:29:42

标签: node.js mongodb express ejs

我正在使用节点js,express,mongodb和ejs构建一个简单的To Do应用程序。

我的get Route呈现表单,而post route处理表单上的发布请求,它们都可以完美地工作,只要我插入(待办事项)它就会被保存并可以在Mongo指南针中找到。

但是它没有像Todo App那样显示在屏幕上。它仅打印(ul)的常规项目符号。我不知道自己在做什么错,这是我的代码:

const express = require('express');
const app = express();
const port = 8080;
const bodyParser = require('body-parser');
const multer = require('multer');
const upload = multer();
const session = require('express-session');
const cookieParser = require('cookie-parser');
const mongoose = require('mongoose');
mongoose.connect("mongodb://localhost/Todo-App", 
{useUnifiedTopology:true,useNewUrlParser:true,useFindAndModify:false,useCreateIndex:true});
app.set('view engine','ejs');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(upload.array());
app.use(cookieParser());
app.use(session({secret:"secret"}));

var todoschema = mongoose.Schema({
item:String,
});

var Todo = mongoose.model("Todo",todoschema);

app.get('/',(req,res)=>{
res.render('home.ejs',{Todo:Todo});
});

app.post('/',(req,res)=>{
var newTodo = new Todo({
    item:req.body.item,
});
newTodo.save((err,result)=>{
    if(err){
        throw err;
    }
    else{
        res.redirect('/');
    }
})
})

app.listen(8080,()=>{
console.log("App is running...")
})

这是我在ejs文件中的代码

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <h1>My To-Do Application</h1>
    <form action="/" method="post">
        <input type="text" name="item" placeholder="Enter Item">
        <input type="submit" value="Add To List">
    </form>
    <%for(var i = 0; i < Todo.length; i++){%>
        <li> <%=Todo[i]%></li>
    <%}%>
</body>
</html>

1 个答案:

答案 0 :(得分:2)

我认为问题在这里

app.get('/', (req, res) => {
    res.render('home.ejs', { Todo : Todo });
});

您正在执行res.render却没有从数据库中找到文档

我认为我们需要在执行res.render之前添加查找查询

应该是这样的

app.get('/', (req, res) => {
    Todo.find({}, (err, todos) => { // passing an empty object as a first argument to the find method means we need to get all the documents from Todo collection
        if (err) {
            throw err;

        } else {

            res.render('home.ejs', { Todo: todos });
        }
    });
});

希望有帮助