使用 ejs 模板更新路由在节点中不起作用(404 未找到错误)

发布于 2025-01-12 06:02:02 字数 3500 浏览 3 评论 0原文

editUser.js 正确加载数据,但是当单击更新时,我收到(404 未找到错误),无法理解为什么更新路由没有被调用。它适用于 /、createUser、editUser/:id(用于加载用户数据)。

editUser.js

<div class="container">
  <a href="/" class="btn btn-primary">All Users</a>
  <form class="col g-3 mt-3"" method="post" action="/update/<%= user.id %>">
    <div class="col-md-6">
      <label for="inputFirstName" class="form-label">First Name:</label>
      <input type="text" class="form-control" value="<%= user.first_name %>" name="first_name" id="first_name">
    </div>
    <div class="col-md-6">
      <label for="inputLastName" class="form-label">Last Name</label>
      <input type="text" class="form-control" value=<%= user.last_name%> name="last_name" id="last_name">
    </div>
    <div class="col-md-6">
      <label for="inputEmail" class="form-label">Email</label>
      <input type="email" class="form-control" value=<%= user.email%> name="email" id="email">
    </div>
    <div class="col-md-6 mt-3">
      <button type="submit" class="btn btn-primary">Update</button>
    </div>
  </form>
 </div>

路由/index.js

    var express = require('express');
var router = express.Router();


var {allUsers, createUser, saveUser, editUser, updateUser} = require('../controllers/userController')

/* GET users listing. */
//Commenting default function
router.get('/', allUsers)
router.get('/createUser', createUser)
router.post('/createUser', saveUser)
router.get('/editUser/:id', editUser)
router.post('/updateUser/:id', updateUser)

module.exports = router;

控制器/userController.js

const User = require('../models/userModel')

const updateUser = async (req, res) => {
console.log('Updating User')

const userId = req.params.id
const userData = req.body
const selector = {where: {id:userId}}

await User.update(userData, selector).catch(error => console.log(error))

res.redirect('/')
}

module.exports = {  allUsers,createUser,saveUser,editUser,updateUser }  

app.js

    //Imports
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var expressLayouts = require('express-ejs-layouts')

const routes = require('./routes');

//DOTENV  for storing sensitive data
require('dotenv').config({path:'./bin/.env'})

var app = express();

// View engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs'); //Key, Value

app.set('layout','layouts/layout')

//Middleware between requet and response
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(expressLayouts)

//Use Router
app.use('/',routes)

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
//error handler first parameter is "err"
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

editUser.js which is loading the data correctly, however when clicking on update I am getting (404 not found error), not able to understand why update route is not getting invoked. It is working for /, createUser, editUser/:id (for loading user data).

editUser.js

<div class="container">
  <a href="/" class="btn btn-primary">All Users</a>
  <form class="col g-3 mt-3"" method="post" action="/update/<%= user.id %>">
    <div class="col-md-6">
      <label for="inputFirstName" class="form-label">First Name:</label>
      <input type="text" class="form-control" value="<%= user.first_name %>" name="first_name" id="first_name">
    </div>
    <div class="col-md-6">
      <label for="inputLastName" class="form-label">Last Name</label>
      <input type="text" class="form-control" value=<%= user.last_name%> name="last_name" id="last_name">
    </div>
    <div class="col-md-6">
      <label for="inputEmail" class="form-label">Email</label>
      <input type="email" class="form-control" value=<%= user.email%> name="email" id="email">
    </div>
    <div class="col-md-6 mt-3">
      <button type="submit" class="btn btn-primary">Update</button>
    </div>
  </form>
 </div>

routes/index.js

    var express = require('express');
var router = express.Router();


var {allUsers, createUser, saveUser, editUser, updateUser} = require('../controllers/userController')

/* GET users listing. */
//Commenting default function
router.get('/', allUsers)
router.get('/createUser', createUser)
router.post('/createUser', saveUser)
router.get('/editUser/:id', editUser)
router.post('/updateUser/:id', updateUser)

module.exports = router;

controllers/userController.js

const User = require('../models/userModel')

const updateUser = async (req, res) => {
console.log('Updating User')

const userId = req.params.id
const userData = req.body
const selector = {where: {id:userId}}

await User.update(userData, selector).catch(error => console.log(error))

res.redirect('/')
}

module.exports = {  allUsers,createUser,saveUser,editUser,updateUser }  

app.js

    //Imports
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var expressLayouts = require('express-ejs-layouts')

const routes = require('./routes');

//DOTENV  for storing sensitive data
require('dotenv').config({path:'./bin/.env'})

var app = express();

// View engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs'); //Key, Value

app.set('layout','layouts/layout')

//Middleware between requet and response
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(expressLayouts)

//Use Router
app.use('/',routes)

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
//error handler first parameter is "err"
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我最亲爱的 2025-01-19 06:02:03

表单操作应为 action="/updateUser/<%= user.id %>

Form action should be action="/updateUser/<%= user.id %>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文