javascript - 如何在 PugJS 的路由器中触发 onclick 功能?

标签 javascript node.js express pug

我目前正在使用一个使用 pug 的 expressJs 模板来制作一个简单的网站。在网站上有一个按钮。我想点击按钮调用 index.js 文件中的函数。

原来我有这样的代码。在 index.pug 文件中:

extends layout

block content
  h1= title
  p Welcome to #{title}
  button#BubbleButton.button.hypeButton.button-3d.button-caution.button-circle.button-jumbo(onclick = 'buttonClick()') Click

在我的 index.js 文件中,它看起来像这样:

var express = require('express');
var router = express.Router();
var PubNub = require('pubnub');
module.exports = router;

function buttonClick(){
  alert('test');
}

但是,我会得到这样的回复:

buttonClick function not found.

坦率地说,我对 angular 比 pug 更熟悉。将 View 端链接到路由器文件需要什么?我知道在 Pug 中,您可以添加端点 REST API 样式,但这不一定是 API。我可能只想展示一些简单的东西而不是暴露它。但是,我可能误解了一些基本的东西。

谢谢!

最佳答案

你的pug文件中script.标签中包含的JavaScript代码只会在浏览器中运行,index.js中的代码只会在服务器端运行。因此他们永远不能直接说话。

您需要在客户端进行 ajax 调用(即在您的 pug 文件中)。这是一个使用 jquery 的示例,但您可以使用许多 ajax 客户端包之一来做同样的事情:

script.
  function onButtonClick(){
    $.ajax({
      "url": "/service",
      "method": "POST"
    }); 
  }

然后在 index.js 中需要一个路由处理程序:

router.post('/service', function(req, res){
  console.log('test');
});

请注意,这将输出到服务器上的控制台,而不是客户端。我相信这就是你想要做的。

要将 jquery 添加到您的页面,您可以使用 cdn(内容分发网络)快速将其引入您的代码。这是哈巴狗的语法:

script(src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous")

或者你可以axios作为 jquery 的轻量级替代品,它所做的只是 ajax:

script(src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js" integrity="sha256-mpnrJ5DpEZZkwkE1ZgkEQQJW/46CSEh/STrZKOB/qoM=" crossorigin="anonymous")

关于javascript - 如何在 PugJS 的路由器中触发 onclick 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52580401/

相关文章:

javascript - 如何修改另一个站点上的变量?

javascript - 如何将 ajax 结果发送到 Angular 中的 Controller ?

javascript - React Native-Vimeo/Youtube视频下载可离线观看

javascript - 在 Mocha 中正常工作测试所需的 setTimeout 包装

mysql - 即使在添加 X-Total-Count 后,分页和排序也无法按预期在 react-admin 中工作

javascript - 类型错误 : undefined is not an object (evaluating '_reactNative.Image.propTypes.resizeMode' )

node.js - Google+ Api 获取用户电子邮件

node.js - Sequelize : query to include a parent model's data if it has associated children; don't return the child model's data

node.js - mean.io 对比 node-restify 和 nginx。为 angularjs 应用程序服务的 json webservice 使用哪个框架

node.js - nodejs express读取文件并异步返回响应