我在Express 4.16(和节点12.1.0)中使用动态GET参数的路由存在问题:该路由从不被命中,而仅适用于某些值。
我想打的那条路线是:
app.get('/done/:taskid', function(req, res){
对于taskid = 0或taskid = 1,路由永远不会匹配,我只是找不到原因。对于taskid> 1来说,它可以很好地工作。实际上,除0或1之外的每个值都可以工作(字符串,null等)。
该应用程序不会崩溃,我没有收到任何日志,但是从未执行与该路由相关的代码,而是将我重定向到
app.get('/', function(req, res){
我在NodeJS中是一个非常新的人,所以这可能是一个基本错误,但我只是不能专心致志。
这是我main.js的完整代码:
const app = require('express')();
const twig = require('twig');
const bodyparser = require('body-parser');
app.set('views', __dirname + "/views");
app.set('view engine', 'twig');
app.use(bodyparser.urlencoded());
var todolist = [];
app.get('/', function(req, res){
res.setHeader('Content-Type', 'text/html');
res.render('index.html.twig', {todolist: todolist});
});
app.get('/done/:taskid', function(req, res){
console.log(req.params);
});
app.post('/new', function(req, res){
//insert in DB later
todolist.push({
name: req.body.taskName,
done: false
});
res.redirect(301, '/');
});
app.listen(8000);
我正在尝试通过一个简单的链接进行访问:
<a class="btn btn-sm btn-primary" href="/done/0">Mark as done</a>
通过pm2或节点运行应用程序不会更改任何内容。
有人对我如何在链接中传递等于0或1的id并成功匹配此路由有什么见解?
=================
编辑:因此,显然没有错误……或至少与URL匹配无关。由于某种原因,该请求被置于“停止”状态,并且有足够长的时间让我认为该请求与任何内容都不匹配(> 1分钟)。这很奇怪,因为我在本地主机上的docker容器中运行了此应用程序。我只有1个标签页处于打开状态,并且在进行几次测试之前,请确保关闭并重新启动该应用程序,因此,我很确定只有1个客户端向我的应用程序发出请求... 我昨天睡觉,今天早上回来,完全相同的代码开始工作。 我真的不知道发生了什么事。
=================
编辑2:做了一些测试,找到了一个模式。问题似乎与铬有关。 代码与Firefox和Safari完美配合。使用Chrome失败100%的时间...但是,如果打开控制台面板,则使用Chrome可以100%的时间...就像错误是有感觉的,仅在没有人看的情况下发生...
答案 0 :(得分:0)
因此,通过将我的<a href="">
更改为<form method="post" ...>
并相应地更改了路线,解决了该问题。仍然不知道是什么引起了问题,但现在可以解决。
评论中提供的链接Andrew提示chrome会在点击之前预取我的链接并修改我的数据。没有解释为什么我没有想到任何日志。
故事的道德修炼者:不要使用GET方法来修改/删除数据。