我正在使用节点js,express,mongodb和ejs构建一个简单的待办应用程序。
[我的get 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>
我认为问题在这里
app.get('/', (req, res) => {
res.render('home.ejs', { Todo : Todo });
});
您正在执行res.render
却没有从db中找到文档
我认为我们需要在执行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 }); } }); });
希望有帮助