如何在Node应用程序中公开函数

时间:2017-10-03 01:18:03

标签: javascript node.js sqlite

我有一个带有简单html,app.js,helper.js

的节点表达应用程序

运行命令node app.js正常运行,页面出现并在localhost:3000上正常运行。

我希望能够调用IN app.js中存在的函数,称为FROM helper.js。我在StackO中看到了几个关于使用module.exports的例子,但是这些例子都反过来调用了这些函数。

有没有办法(方法)这样做?我已经看到了一些看似有希望的浏览器。这是唯一的选择吗?

我知道写这篇文章的方式不会奏效,但是可以这样做吗?这样,如果我点击网页上的一个按钮,它将会安装3.13'?

app.js

// Various  lines of node and express code
module.exports = {iLikePi: function() { return '3.14' } }

helper.js

var app_mod = require('./app.js')
function aButtonClicked() { console.log(app_mod.iLikePi()) }

的index.html

// A button onclick event that calls aButtonClicked() 

最后,这一切的原因。我想在节点应用程序中使用sqlite3。我需要sqlite3进入模块的唯一方法似乎是在app.js.当我尝试将sqlite3转换为helper.js时,它不起作用。如果有一种方法可以在app.js之外编写一个可以调用和使用npm的sqlite3的模块,那么这将是一个对我来说没问题的替代方案!

谢谢大家, 弗兰克

2 个答案:

答案 0 :(得分:0)

你绝对可以从另一个文件调用函数!

以下是一个例子:

app.js

const iLikePie = () => 3.14

module.exports = iLikePie

helper.js

const app_mod = require('./app.js)

const aButtonClicked = () => console.log(app_mod())

当调用aButtonClicked时,这将打印3.14。

答案 1 :(得分:0)

您的客户端代码永远不应该直接访问SQL服务器。您可以通过API调用/ HTTP请求或某个路径公开您的数据。

客户端POST示例:

onButtonClick = () => {
  fetch("/math/executepifunc", {
    method: "POST",
    redirect: "follow",
    headers: {
        "Accept": "application/json",
        "Content-Type": "application/json"
    },
    body: JSON.stringify({ 
      num: <value> // something your want server to do with the Pi
     })
}).then(response => {
    // Process your response there
}).catch(err => {throw err;});
}

来自服务器:

// Mini-middleware grabs all routes under "/math"
var mathFuncRouter = express.Router();
router.post("/executepifunc", (req, res) => {
  const num = req.body.num;
  // execute your function from server
});

// Connect to your custom middleware
app.use("/math", mathFuncRouter);