首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于使用node、express和pug的404 "update“调用的问题

关于使用node、express和pug的404 "update“调用的问题
EN

Stack Overflow用户
提问于 2021-10-24 03:23:41
回答 1查看 22关注 0票数 0

我正在使用node,express和pug构建一个简单的应用程序。我们正在努力存储"bycicles“数据。我们有一个创建/查看和删除视图的示例,但在给定示例的情况下,要求实现更新功能。

我可以在表单中加载指定的bycicle,但是,当按send as更新Bycicola404错误加载的写入数据时,我对这个网页编程非常陌生,不知道这是如何发生的,所以我请求任何帮助来理解这个问题。

我使用create.pug示例来构建我的update.pug视图。在表单中,我有点不确定是应该把(action='bicicletas/update')还是('bicicletas/'+bici.id+'/update')放在这里( update.pug):

代码语言:javascript
复制
extends ../layout
block content
    a(href='/bicicletas') Volver

    br
    br
    br
    h1 Editar bicicleta
    br
    br


    // form(action='bicicletas/'+bici.id+'/update',method='post')

    form(action='bicicletas/update', method='post')
        label(for='id') ID:
        input#id(type='text' name='id' value=bici.id )
        br
        select(name='color', id='', required)
            each val in ['--select--','Blanco' , 'Negro' , 'Rojo','Verde']
                option=val
        br
        select(name='modelo', id='', required)
            each val in ['--select--','Ruta' , 'Cross' , 'Montian','Turismo']
                option=val
        br
        label(for='lat') Latitud:
        input#id(type='text' name='lat' value= bici.ubicacion[0] )
        br
        label(for='lng') Longitud:
        input#id(type='text' name='lng' value= bici.ubicacion[1]  )
        br
        br
        input.btn(type='submit' name='OK' )

我已经成功地完成了"get“函数,但是"post”函数抛出了404。

在my routes > bycicles中,我以这种方式设置了我的路由,如示例所示:

代码语言:javascript
复制
const express = require("express");
const router = express.Router();
const bicicletaController = require("../controllers/bicicleta");

router.get("/", bicicletaController.list);
router.get("/:id/show", bicicletaController.show);
router.get("/create", bicicletaController.create_get);
router.post("/create", bicicletaController.create_post);
router.get("/:id/update", bicicletaController.update_get);
router.post("/:id/update", bicicletaController.update_post);
router.post("/:id/delete", bicicletaController.delete);

module.exports = router;

在一个控制器文件夹中,我添加了一个示例update_post脚本,我在其中创建了一个update_get和一个update_post,并使用其他脚本作为参考

代码语言:javascript
复制
const Bicicleta = require("../models/bicicleta");
exports.list = function (re, res) {
  res.render("bicicletas/index", { bicis: Bicicleta.allBicis });
};
exports.show = function (req, res) {
  var bici = Bicicleta.findById(req.params.id);
  res.render("bicicletas/show", { bici });
};
exports.create_get = function (req, res) {
  res.render("bicicletas/create");
};
exports.create_post = function (req, res) {
  var bici = new Bicicleta(req.body.id, req.body.color, req.body.modelo);
  bici.ubicacion = [req.body.lat, req.body.lng];
  Bicicleta.add(bici);
  res.redirect("/bicicletas");
};
exports.delete = function (req, res) {
  Bicicleta.removeById(req.body.id);
  res.redirect("/bicicletas");
};

exports.update_get = function (req, res) {
  var bici = Bicicleta.findById(req.params.id);
  res.render("bicicletas/update", { bici });
};

exports.update_post = function (req, res) {
  var bici = new Bicicleta(req.body.id, req.body.color, req.body.modelo);
  bici.ubicacion = [req.body.lat, req.body.lng];
  Bicicleta.update(req.body);
  res.redirect("/bicicletas");
};

我创建了一个bycicle模型,在该模型中,我使用类似于先前存在的removebyID函数的方法添加了更新,使用拼接来替换bycicle.

代码语言:javascript
复制
let Bicicleta = function (id, color, modelo, ubicacion) {
    this.id = id;
    this.color = color;
    this.modelo = modelo;
    this.ubicacion = ubicacion;
  };
  Bicicleta.prototype.toString = function () {
    return `id: ${this.id} | color: ${this.color}`;
  };
  
  Bicicleta.allBicis = [];

  Bicicleta.add = function (aBici) {
    Bicicleta.allBicis.push(aBici);
  };
  Bicicleta.findById = function (aBiciId) {
    var aBici = Bicicleta.allBicis.find((x) => x.id == aBiciId);
    if (aBici) return aBici;
    else throw new Error(`No existe una Bicicleta con el id: ${aBiciId}`);
  };
  
  Bicicleta.removeById = function (aBiciId) {
    var aBici = Bicicleta.findById(aBiciId);
    for (let i = 0; i < Bicicleta.allBicis.length; i++) {
      if (Bicicleta.allBicis[i].id == aBiciId) {
        Bicicleta.allBicis.splice(i, 1);
        break;
      }
    }
  };

  Bicicleta.update = function (aBici) {
    var aBiciOld = Bicicleta.findById(aBici.id);
    for (let i = 0; i < Bicicleta.allBicis.length; i++) {
      if (Bicicleta.allBicis[i].id == aBiciOld.id) {
        Bicicleta.allBicis.splice(i, 1, aBici);
        break;
      }
    }
  };

正如我刚刚提到的,我非常困惑为什么404错误。控制台不会给出任何提示,只给出错误处理程序。

代码语言:javascript
复制
 NotFoundError: Not Found
    at E:\2021-2\Topicos_Ingenieria_Software\LAB_01\redBicicletas\app.js:29:8
    at Layer.handle [as handle_request] (E:\2021-2\Topicos_Ingenieria_Software\LAB_01\redBicicletas\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (E:\2021-2\Topicos_Ingenieria_Software\LAB_01\redBicicletas\node_modules\express\lib\router\index.js:317:13)
    at E:\2021-2\Topicos_Ingenieria_Software\LAB_01\redBicicletas\node_modules\express\lib\router\index.js:284:7
    at Function.process_params (E:\2021-2\Topicos_Ingenieria_Software\LAB_01\redBicicletas\node_modules\express\lib\router\index.js:335:12)
    at next (E:\2021-2\Topicos_Ingenieria_Software\LAB_01\redBicicletas\node_modules\express\lib\router\index.js:275:10)
    at E:\2021-2\Topicos_Ingenieria_Software\LAB_01\redBicicletas\node_modules\express\lib\router\index.js:635:15
    at next (E:\2021-2\Topicos_Ingenieria_Software\LAB_01\redBicicletas\node_modules\express\lib\router\index.js:260:14)
    at Function.handle (E:\2021-2\Topicos_Ingenieria_Software\LAB_01\redBicicletas\node_modules\express\lib\router\index.js:174:3)
    at router (E:\2021-2\Topicos_Ingenieria_Software\LAB_01\redBicicletas\node_modules\express\lib\router\index.js:47:12)

非常感谢大家的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-27 03:03:49

我发现了错误。表单中的部分

代码语言:javascript
复制
form(action='bicicletas/update', method='post')

真的应该是

代码语言:javascript
复制
form.inline(action=`/bicicletas/${bici.id}/update`, method='post')

修复了404错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69693632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档