Node.js 简单易用的应用程序不需要';不要打印到dos

Node.js 简单易用的应用程序不需要';不要打印到dos,node.js,mongodb,express,ejs,Node.js,Mongodb,Express,Ejs,我正在使用NodeJS、express、mongodb和ejs构建一个简单的应用程序 我的get路径呈现表单,post路径处理表单上的post请求,它们都工作得很好,无论何时我插入(todo),它都会被保存,并可以在我的Mongo compass中找到 但它不会像Todo应用程序那样出现在屏幕上。它只打印(ul)的常用项目符号。我不知道我做错了什么,这是我的代码: const express = require('express'); const app = express(); const p

我正在使用NodeJS、express、mongodb和ejs构建一个简单的应用程序

我的get路径呈现表单,post路径处理表单上的post请求,它们都工作得很好,无论何时我插入(todo),它都会被保存,并可以在我的Mongo compass中找到

但它不会像Todo应用程序那样出现在屏幕上。它只打印(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>

我的待办事项申请表

  • 我认为问题就在这里

    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 });
            }
        });
    });
    

    希望有帮助

    我想问题就在这里

    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 });
            }
        });
    });
    

    希望它有帮助

    哦,哇,它工作得很好,但是,你能解释一下为什么{Todo:todos}以及为什么你应该在渲染之前找到它吗?渲染意味着你会将响应发送到ejs文件,所以你必须在返回EJSO之前找到所有记录哇,它工作得很好,但是,你能解释一下为什么{Todo:todos}为什么要在渲染前查找?渲染意味着您将向ejs文件发送响应,因此您必须在返回ejs之前查找所有记录