Javascript 节点js表单提交导致以下错误-错误:无法发布/
我已将登录/注册功能添加到我的应用程序中。当在单独的文件夹中使用时,这些添加的功能和我的应用程序本身一样可以完美地工作。但是,将登录/注册功能添加到工作正常的应用程序中导致了此错误。当我在登录页面上键入详细信息并单击注册按钮(注册帐户)以在浏览器选项卡上收到以下消息“错误:无法发布/”时,就会发生这种情况。我不明白为什么我会犯这个错误。这是我现在正在使用的代码,它让我得到了这个错误。我是新的节点js等,所以我道歉,如果这是简单的!我使用MongoDB Compass社区作为我的数据库。另外,很抱歉有很多代码,但这是使用我的登录/注册功能所需的全部代码 控制器/employeeController.jsJavascript 节点js表单提交导致以下错误-错误:无法发布/,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我已将登录/注册功能添加到我的应用程序中。当在单独的文件夹中使用时,这些添加的功能和我的应用程序本身一样可以完美地工作。但是,将登录/注册功能添加到工作正常的应用程序中导致了此错误。当我在登录页面上键入详细信息并单击注册按钮(注册帐户)以在浏览器选项卡上收到以下消息“错误:无法发布/”时,就会发生这种情况。我不明白为什么我会犯这个错误。这是我现在正在使用的代码,它让我得到了这个错误。我是新的节点js等,所以我道歉,如果这是简单的!我使用MongoDB Compass社区作为我的数据库。另外,很抱
const express = require('express');
var router = express.Router();
const mongoose = require('mongoose');
const Employee = mongoose.model('Employee');
const Task = require('../models/task');
var User = require('../models/user');
router.get('/login', (req, res) => {
res.render("employee/login");
});
//POST route for updating data
router.post('employee/login', function (req, res, next) {
// confirm that user typed same password twice
if (req.body.password !== req.body.passwordConf) {
var err = new Error('Passwords do not match.');
err.status = 400;
res.send("passwords dont match");
return next(err);
}
if (req.body.email &&
req.body.username &&
req.body.password &&
req.body.passwordConf) {
var userData = {
email: req.body.email,
username: req.body.username,
password: req.body.password,
}
User.create(userData, function (error, user) {
if (error) {
return next(error);
} else {
req.session.userId = user._id;
return res.redirect('/profile');
}
});
} else if (req.body.logemail && req.body.logpassword) {
User.authenticate(req.body.logemail, req.body.logpassword, function (error, user) {
if (error || !user) {
var err = new Error('Wrong email or password.');
err.status = 401;
return next(err);
} else {
req.session.userId = user._id;
return res.redirect('/profile');
}
});
} else {
var err = new Error('All fields required.');
err.status = 400;
return next(err);
}
})
// GET route after registering
router.get('/profile', function (req, res, next) {
User.findById(req.session.userId)
.exec(function (error, user) {
if (error) {
return next(error);
} else {
if (user === null) {
var err = new Error('Not authorized! Go back!');
err.status = 400;
return next(err);
} else {
return res.send('<h1>Name: </h1>' + user.username + '<h2>Mail: </h2>' + user.email + '<br><a type="button" href="/logout">Logout</a>')
}
}
});
});
// GET for logout logout
router.get('/logout', function (req, res, next) {
if (req.session) {
// delete session object
req.session.destroy(function (err) {
if (err) {
return next(err);
} else {
return res.redirect('/');
}
});
}
});
module.exports = router;
server.js
require('./models/employee.model');
require('./models/task');
const express = require('express');
const path = require('path');
const exphbs = require('express-handlebars');
const bodyparser = require('body-parser');
const logger = require('morgan');
const favicon = require('serve-favicon');
var app = express();
var mongoose = require('mongoose');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost:27017/testForAuth', { useNewUrlParser: true, useCreateIndex: true, useFindAndModify: false }, (err) => {
if (!err) { console.log('MongoDB Connection Succeeded.') }
else { console.log('Error in DB connection : ' + err) }
});
var db = mongoose.connection;
//handle mongo error
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
// we're connected!
});
//use sessions for tracking logins
app.use(session({
secret: 'work hard',
resave: true,
saveUninitialized: false,
store: new MongoStore({
mongooseConnection: db
})
}));
const employeeController = require('./controllers/employeeController');
var app = express();
//setting up morgan middleware
app.use(logger('dev'));
app.use(bodyparser.urlencoded({
extended: true
}));
app.use(bodyparser.json());
app.set('views', path.join(__dirname, '/views/'));
app.engine('hbs', exphbs({ extname: 'hbs', defaultLayout: 'mainLayout', layoutsDir: __dirname + '/views/layouts/' }));
app.set('view engine', 'hbs');
//serving blank favicon to keep from throwing 404 errors
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')))
//setting up static path for serving static files
app.use(express.static(path.join(__dirname, 'public')));
//Bringing in the routes
const index = require('./routes/index');
const api = require('./routes/api');
app.use('/', index);
app.use('/api', api);
app.listen(3000, () => {
console.log('Express server started at port : 3000');
});
app.use('/employee', employeeController.router);
视图/employee/login.hbs(把手)
使用身份验证注册登录
addEventListener(“加载”,函数(){setTimeout(hideURLbar,0);},false);函数hideURLbar(){window.scrollTo(0,1);}
测试认证
登录
登记
var passWordField=document.getElementById('密码')
var passWordConfirmField=document.getElementById('password_conf'))
var form=document.getElementById('login')
函数validateMyForm(){
如果(passWordField.value!=passWordConfirmField.value){
警报(“密码不匹配。请重试”);
}否则{
表格提交(
}
}
您缺少路径中的第一个斜杠发布“员工/登录”
您只需更改此行:
router.post('employee/login', function (req, res, next) {
这样说:
router.post('/employee/login', function (req, res, next) {
这应该可以确定路线
在表单中,必须更改action属性以指向处理post请求的路由
<form action="/employee/login" method="post">
这应该可以解决。“这些新增功能在单独的文件夹中使用时效果很好”你的意思是你可以注册吗?@JorgePires对不起,Jorge!我的意思是,我有一个文件夹,例如“loginmongo”,其中有控制器文件、模型、服务器等,我可以很好地运行(我可以登录、注册等)。但是,我有一个结合了CRUD和TODO的应用程序,但在进入该应用程序之前,我需要一个登录/注册功能。那么两个独立的应用程序,但是如果这有意义的话,它们会结合起来吗?@JorgePires,是的,上面的代码是我将登录和注册等应用到我的另一个应用程序,但出现了这个错误。当我在其单独的文件夹/不同的应用程序中使用登录/注册功能时,我没有这样做。“当我在登录页面上键入我的详细信息并单击注册按钮“注册路径在哪里?我相信它在这里
router.post('employee/login',function(req,res,next))时,就会发生这种情况。”
。对吗?评论不适用于扩展讨论;此对话已结束。
router.post('/employee/login', function (req, res, next) {
<form action="/employee/login" method="post">