Javascript 我遇到了一个错误&x27;发送后无法设置标题';无论node.js上出现什么,电子邮件上的错误消息都会不断出现
目录如下:父文件夹“联系人表单”有一个子目录“src”,其中包含“server.js”和“routes.js”文件,还包含另一个文件夹“views”,其中包含“Contact.ejs”和“index.ejs”文件 这是“server.js”上的代码Javascript 我遇到了一个错误&x27;发送后无法设置标题';无论node.js上出现什么,电子邮件上的错误消息都会不断出现,javascript,node.js,express,Javascript,Node.js,Express,目录如下:父文件夹“联系人表单”有一个子目录“src”,其中包含“server.js”和“routes.js”文件,还包含另一个文件夹“views”,其中包含“Contact.ejs”和“index.ejs”文件 这是“server.js”上的代码 const path = require('path'); const express = require('express'); const layout = require('express-layout'); const bodyParser
const path = require('path');
const express = require('express');
const layout = require('express-layout');
const bodyParser = require('body-parser');
const validator = require('express-validator');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const flash = require('express-flash');
const routes = require('./routes');
const app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
const middlewares = [
validator(),
layout(),
express.static(path.join(__dirname, 'public')),
bodyParser.urlencoded(),
cookieParser(),
session({
secret: 'super-secret-key',
key: 'super-secret-cookie',
resave: false,
saveUninitialized: false,
cookie: {maxage: 6000}
}),
flash()
]
app.use(middlewares);
app.use('/', routes);
app.use((req, res, next) => {
res.status(404).send("Sorry can't find that!")
});
app.use((err, req, res, next) => {
console.error(err.stack)
res.status(500).send('Something broke!')
});
app.listen(3000, () => {
console.log(`App running at http://localhost:3000`)
});
然后在“routes.js”上
const express = require('express');
const router = express.Router();
const { check, validationResult } = require('express-validator/check');
const { matchedData } = require('express-validator/filter');
router.get('/', (req, res) => {
res.render('index')
});
router.get('/contact', (req,res) => {
res.render('contact', {
data: {},
errors: {}
});
});
router.post('/contact', [
//validation using 'express-validaor' && 'express-validator/check' and
//Sanitization using
// 'express-validator/filter'
check('message')
.isLength({ min:1 })
.withMessage('Message is required')
.trim(),
check('email')
.isEmail().withMessage('That Email doesn\'t look right')
.trim()
.normalizeEmail()
], (req,res) => {
const errors = validationResult(req);
res.render('contact', {
data: req.body,
errors: errors.mapped()
});
const data = matchedData(req);
console.log('Sanitized: ', data);
//Sending sanitized data and redirecting to the index page
req.flash('success', 'Thanks for the message! I\'ll be in touch :) ');
res.redirect('/');
});
module.exports = router;
关于“contact.ejs”
<div class="form-header">
<% if(Object.keys(errors).length === 0) { %>
<h2>Send us a Message</h2>
<% } else { %>
<h2 class="error-heading">Oops, please correct the following:</h2>
<ul class="erroe-list">
<% Object.values(errors).forEach(error => { %>
<li> <%= error.msg %> </li>
<% }) %>
</ul>
<% } %>
</div>
<form method="POST" action="/contact" novalidate>
<div class="form-field <%= errors.message ? 'form-field-invalid' : '' %>">
<label for="message">Message</label>
<textarea class="input" id="message" name="message" rows="4"
autofocus >
<%= data.message %> </textarea>
<% if (errors.message) { %>
<div class="error"><%= errors.message.msg %></div>
<% } %>
</div>
<div class="form-field <%= errors.email ? 'form-field-invalid' : '' %>">
<label for="email">Email</label>
<input class="input" id="email" type="email" value="<%= data.email %>"
/>
<% if (errors.email) { %>
<div class="error"><%= errors.email.msg %></div>
<% } %>
</div>
<div class="form-actions">
<button class="btn" type="submit" >Send</button>
</div>
</form>
给我们发个信
哦,请更正以下内容:
{ %>
消息
电子邮件
发送
在'index.ejs'上
<h1>Working With Forms in Node.js</h1>
在Node.js中使用表单
发送标题后无法发送标题。
的通用消息是:您已经发送了响应。。您同时呈现页面和重定向,这没有任何意义
因此,要么:
res.render('contact', {
data: req.body,
errors: errors.mapped()
});
或
如果只想在出错时
渲染
,在成功时重定向
,请执行以下操作:
const errors = validationResult(req);
if (!errors.isEmpty()) {
// Notice the return, so redirect won't run.
return res.render('contact', {
data: req.body,
errors: errors.mapped()
});
}
const data = matchedData(req);
console.log('Sanitized: ', data);
//Sending sanitized data and redirecting to the index page
req.flash('success', 'Thanks for the message! I\'ll be in touch :) ');
res.redirect('/');
关于电子邮件错误,您缺少电子邮件输入
上的名称
属性,没有它,将不会发布任何内容
<input class="input" name="email" id="email" type="email" value="<%= data.email %>"
/>
查看以下问题以了解更多信息:在router.post(“/contact”)中,如果下面有一个render()和一个redirect(),这将产生错误。我相信这是由于执行
res.render()
和res.redirect()导致的
好的。无论我在电子邮件输入框中输入了什么,你都能检查我收到的电子邮件错误吗?是的..就是那个错误..即使我输入了有效的电子邮件,它也会给我那个错误。更新了我的答案,它实际上是:如果(!errors.isEmpty()){
,您在电子邮件输入中缺少了名称
属性。我以前尝试过这样做,但o做不到,我刚得到16分,我当时是11分,它说它已经记录了我的投票,但不会改变投票结果。
<input class="input" name="email" id="email" type="email" value="<%= data.email %>"
/>