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