Node.js 在express上发出POST请求时,如何呈现EJS文件?
我的应用程序有路径Node.js 在express上发出POST请求时,如何呈现EJS文件?,node.js,express,ejs,Node.js,Express,Ejs,我的应用程序有路径\,这是主页(工作) 它还有一个诗歌路径,在那里我可以看到诗歌列表(工作) 它还有一个poems/new路径,在那里我被要求添加一首新诗(这里是我需要帮助的地方) 我向本地主机上的路径poems/new发出GET请求:http://localhost:3000/poems/new 当页面加载时,我可以看到一个输入元素和一个按钮 期望的行为 输入文本后,我想: a) 正确地发出POST请求 b) 访问poems页面,查看用户键入的文本作为poems页面上诗歌列表的最后一项 实际行
\
,这是主页(工作)
它还有一个诗歌
路径,在那里我可以看到诗歌列表(工作)
它还有一个poems/new
路径,在那里我被要求添加一首新诗(这里是我需要帮助的地方)
我向本地主机上的路径poems/new
发出GET
请求:http://localhost:3000/poems/new
当页面加载时,我可以看到一个输入元素和一个按钮
期望的行为
输入文本后,我想:
a) 正确地发出POST
请求
b) 访问poems
页面,查看用户键入的文本作为poems
页面上诗歌列表的最后一项
实际行为
我在终端上看到的输出是:
GET /poems/new 200 28.877 ms - 378
GET /stylesheets/style.css 304 3.242 ms - -
POST /poems/new 404 35.646 ms - 149
t我在屏幕上看到的输出是:
无法发布/poems/new
应用程序文件
package.json
:
{
"name": "poems",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www",
"start-test-server": "node ./bin/www",
"test": "jest",
"test-coverage": "jest --coverage"
},
"dependencies": {
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"dotenv": "^8.2.0",
"ejs": "~2.6.1",
"errorhandler": "^1.5.1",
"express": "~4.16.1",
"morgan": "~1.9.1"
},
"jest": {
"preset": "jest-puppeteer"
},
"devDependencies": {
"jest": "^26.6.3",
"jest-puppeteer": "^4.4.0",
"pg": "^8.5.1",
"puppeteer": "^8.0.0"
}
}
app.js
:
var errorhandler = require('errorhandler');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var poemsRouter = require('./routes/poems')
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(errorhandler());
app.use('/', indexRouter);
app.use('/poems', poemsRouter);
// error handler
app.use(function(err, req, res, next) {
res.locals.message = err.message
if (process.env.NODE_ENV === 'development') {
// only use in development
res.locals.error = err;
}
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
var express = require('express');
var router = express.Router();
const poem = require('../public/javascripts/poem')
/* GET poems list page. */
router.get('/', async function(req, res, next) {
await poem.allPoems((allPoems) => {
res.render('poems', { message: allPoems });
});
});
/* GET add poem page. */
router.get('/new', function(req, res, next) {
let content = req.body;
console.log(content)
res.render('addPoem', { message: content });
});
/* Add a new poem. */
router.post('/new'), function(req, res, next) {
const message = req.body.content // not sure if this is even correct
console.log(message)
res.render('poems') // something like res.render('poems', { message: I_should_put_a_correct_vaiarable_name_here }) should probably happen here
}
module.exports = router;
<!DOCTYPE html>
<html>
<head>
<link rel='stylesheet' href='../public/stylesheets/style.css' />
</head>
<body>
<ul>
<!-- <%= message %> -->
<%message.forEach(poem => {%>
<li><%= poem.content %></li>
<% }) %>
</ul>
</body>
</html>
<!DOCTYPE HTML>
<HTML>
<head>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<form action="/poems/new" method="post">
<!-- <%= message %> -->
<label for="content"><%=message.content%></label>
<input type="text" id="content" name="content" value="<%= message.content %>">
<button type="submit" value="add poem">add poem</button>
</form>
</body>
</html>
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', {
title: 'Poems',
message: 'Here you\'ll see poems' });
});
module.exports = router;
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
<section id="poems"> <%= message %> </section>
</body>
</html>
<h1><%= message %></h1>
<h2><%= error.status %></h2>
<pre><%= error.stack %></pre>
routes/poems.js
:
var errorhandler = require('errorhandler');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var poemsRouter = require('./routes/poems')
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(errorhandler());
app.use('/', indexRouter);
app.use('/poems', poemsRouter);
// error handler
app.use(function(err, req, res, next) {
res.locals.message = err.message
if (process.env.NODE_ENV === 'development') {
// only use in development
res.locals.error = err;
}
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
var express = require('express');
var router = express.Router();
const poem = require('../public/javascripts/poem')
/* GET poems list page. */
router.get('/', async function(req, res, next) {
await poem.allPoems((allPoems) => {
res.render('poems', { message: allPoems });
});
});
/* GET add poem page. */
router.get('/new', function(req, res, next) {
let content = req.body;
console.log(content)
res.render('addPoem', { message: content });
});
/* Add a new poem. */
router.post('/new'), function(req, res, next) {
const message = req.body.content // not sure if this is even correct
console.log(message)
res.render('poems') // something like res.render('poems', { message: I_should_put_a_correct_vaiarable_name_here }) should probably happen here
}
module.exports = router;
<!DOCTYPE html>
<html>
<head>
<link rel='stylesheet' href='../public/stylesheets/style.css' />
</head>
<body>
<ul>
<!-- <%= message %> -->
<%message.forEach(poem => {%>
<li><%= poem.content %></li>
<% }) %>
</ul>
</body>
</html>
<!DOCTYPE HTML>
<HTML>
<head>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<form action="/poems/new" method="post">
<!-- <%= message %> -->
<label for="content"><%=message.content%></label>
<input type="text" id="content" name="content" value="<%= message.content %>">
<button type="submit" value="add poem">add poem</button>
</form>
</body>
</html>
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', {
title: 'Poems',
message: 'Here you\'ll see poems' });
});
module.exports = router;
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
<section id="poems"> <%= message %> </section>
</body>
</html>
<h1><%= message %></h1>
<h2><%= error.status %></h2>
<pre><%= error.stack %></pre>
视图/poems.ejs
:
var errorhandler = require('errorhandler');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var poemsRouter = require('./routes/poems')
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(errorhandler());
app.use('/', indexRouter);
app.use('/poems', poemsRouter);
// error handler
app.use(function(err, req, res, next) {
res.locals.message = err.message
if (process.env.NODE_ENV === 'development') {
// only use in development
res.locals.error = err;
}
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
var express = require('express');
var router = express.Router();
const poem = require('../public/javascripts/poem')
/* GET poems list page. */
router.get('/', async function(req, res, next) {
await poem.allPoems((allPoems) => {
res.render('poems', { message: allPoems });
});
});
/* GET add poem page. */
router.get('/new', function(req, res, next) {
let content = req.body;
console.log(content)
res.render('addPoem', { message: content });
});
/* Add a new poem. */
router.post('/new'), function(req, res, next) {
const message = req.body.content // not sure if this is even correct
console.log(message)
res.render('poems') // something like res.render('poems', { message: I_should_put_a_correct_vaiarable_name_here }) should probably happen here
}
module.exports = router;
<!DOCTYPE html>
<html>
<head>
<link rel='stylesheet' href='../public/stylesheets/style.css' />
</head>
<body>
<ul>
<!-- <%= message %> -->
<%message.forEach(poem => {%>
<li><%= poem.content %></li>
<% }) %>
</ul>
</body>
</html>
<!DOCTYPE HTML>
<HTML>
<head>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<form action="/poems/new" method="post">
<!-- <%= message %> -->
<label for="content"><%=message.content%></label>
<input type="text" id="content" name="content" value="<%= message.content %>">
<button type="submit" value="add poem">add poem</button>
</form>
</body>
</html>
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', {
title: 'Poems',
message: 'Here you\'ll see poems' });
});
module.exports = router;
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
<section id="poems"> <%= message %> </section>
</body>
</html>
<h1><%= message %></h1>
<h2><%= error.status %></h2>
<pre><%= error.stack %></pre>
routes/index.js
:
var errorhandler = require('errorhandler');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var poemsRouter = require('./routes/poems')
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(errorhandler());
app.use('/', indexRouter);
app.use('/poems', poemsRouter);
// error handler
app.use(function(err, req, res, next) {
res.locals.message = err.message
if (process.env.NODE_ENV === 'development') {
// only use in development
res.locals.error = err;
}
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
var express = require('express');
var router = express.Router();
const poem = require('../public/javascripts/poem')
/* GET poems list page. */
router.get('/', async function(req, res, next) {
await poem.allPoems((allPoems) => {
res.render('poems', { message: allPoems });
});
});
/* GET add poem page. */
router.get('/new', function(req, res, next) {
let content = req.body;
console.log(content)
res.render('addPoem', { message: content });
});
/* Add a new poem. */
router.post('/new'), function(req, res, next) {
const message = req.body.content // not sure if this is even correct
console.log(message)
res.render('poems') // something like res.render('poems', { message: I_should_put_a_correct_vaiarable_name_here }) should probably happen here
}
module.exports = router;
<!DOCTYPE html>
<html>
<head>
<link rel='stylesheet' href='../public/stylesheets/style.css' />
</head>
<body>
<ul>
<!-- <%= message %> -->
<%message.forEach(poem => {%>
<li><%= poem.content %></li>
<% }) %>
</ul>
</body>
</html>
<!DOCTYPE HTML>
<HTML>
<head>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<form action="/poems/new" method="post">
<!-- <%= message %> -->
<label for="content"><%=message.content%></label>
<input type="text" id="content" name="content" value="<%= message.content %>">
<button type="submit" value="add poem">add poem</button>
</form>
</body>
</html>
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', {
title: 'Poems',
message: 'Here you\'ll see poems' });
});
module.exports = router;
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
<section id="poems"> <%= message %> </section>
</body>
</html>
<h1><%= message %></h1>
<h2><%= error.status %></h2>
<pre><%= error.stack %></pre>
视图/索引.ejs
:
var errorhandler = require('errorhandler');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var poemsRouter = require('./routes/poems')
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(errorhandler());
app.use('/', indexRouter);
app.use('/poems', poemsRouter);
// error handler
app.use(function(err, req, res, next) {
res.locals.message = err.message
if (process.env.NODE_ENV === 'development') {
// only use in development
res.locals.error = err;
}
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
var express = require('express');
var router = express.Router();
const poem = require('../public/javascripts/poem')
/* GET poems list page. */
router.get('/', async function(req, res, next) {
await poem.allPoems((allPoems) => {
res.render('poems', { message: allPoems });
});
});
/* GET add poem page. */
router.get('/new', function(req, res, next) {
let content = req.body;
console.log(content)
res.render('addPoem', { message: content });
});
/* Add a new poem. */
router.post('/new'), function(req, res, next) {
const message = req.body.content // not sure if this is even correct
console.log(message)
res.render('poems') // something like res.render('poems', { message: I_should_put_a_correct_vaiarable_name_here }) should probably happen here
}
module.exports = router;
<!DOCTYPE html>
<html>
<head>
<link rel='stylesheet' href='../public/stylesheets/style.css' />
</head>
<body>
<ul>
<!-- <%= message %> -->
<%message.forEach(poem => {%>
<li><%= poem.content %></li>
<% }) %>
</ul>
</body>
</html>
<!DOCTYPE HTML>
<HTML>
<head>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<form action="/poems/new" method="post">
<!-- <%= message %> -->
<label for="content"><%=message.content%></label>
<input type="text" id="content" name="content" value="<%= message.content %>">
<button type="submit" value="add poem">add poem</button>
</form>
</body>
</html>
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', {
title: 'Poems',
message: 'Here you\'ll see poems' });
});
module.exports = router;
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
<section id="poems"> <%= message %> </section>
</body>
</html>
<h1><%= message %></h1>
<h2><%= error.status %></h2>
<pre><%= error.stack %></pre>
我现在正在学习快车。如果有什么遗漏,你想让我补充一下,请告诉我。另外,如果我在网上添加一个链接到我的项目,我不知道它是如何工作的。接受建议。非常感谢。您是否为indexRouter设置了catchall 404路由处理程序?我没有。我已经从npm安装了
errorhandler
,但是如果我安装正确,我没有正确使用它?我不熟悉这个软件包,但它似乎没有涵盖404未找到的错误类型。你能把你的indexRouter文件的代码粘贴到你的帖子里吗?没错。这也是我想关注的另一个问题。我刚刚粘贴了indexRouter文件和相关的index.ejs
文件(加上error.ejs
文件。-不确定是否需要最后一个文件)好的,您在这里过早地关闭了括号:router.post(“/new”)。应该是:router.post('/new',function(req,res,next){/..whatever})。看起来可能还有其他问题,包括在poem.ejs文件中,但我让您看看。