Javascript 节点js表单提交导致以下错误-错误:无法发布/

Javascript 节点js表单提交导致以下错误-错误:无法发布/,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我已将登录/注册功能添加到我的应用程序中。当在单独的文件夹中使用时,这些添加的功能和我的应用程序本身一样可以完美地工作。但是,将登录/注册功能添加到工作正常的应用程序中导致了此错误。当我在登录页面上键入详细信息并单击注册按钮(注册帐户)以在浏览器选项卡上收到以下消息“错误:无法发布/”时,就会发生这种情况。我不明白为什么我会犯这个错误。这是我现在正在使用的代码,它让我得到了这个错误。我是新的节点js等,所以我道歉,如果这是简单的!我使用MongoDB Compass社区作为我的数据库。另外,很抱

我已将登录/注册功能添加到我的应用程序中。当在单独的文件夹中使用时,这些添加的功能和我的应用程序本身一样可以完美地工作。但是,将登录/注册功能添加到工作正常的应用程序中导致了此错误。当我在登录页面上键入详细信息并单击注册按钮(注册帐户)以在浏览器选项卡上收到以下消息“错误:无法发布/”时,就会发生这种情况。我不明白为什么我会犯这个错误。这是我现在正在使用的代码,它让我得到了这个错误。我是新的节点js等,所以我道歉,如果这是简单的!我使用MongoDB Compass社区作为我的数据库。另外,很抱歉有很多代码,但这是使用我的登录/注册功能所需的全部代码

控制器/employeeController.js

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">