我如何访问在节点中设置的功能并在浏览器中调用它?抱歉,我是 node 的新手

问题描述 投票:0回答:1

在浏览器中-单击按钮我想从节点“myFunction”触发功能

我试过browsify但什么也没发生。

在本地主机(wamp)服务器上测试,它工作正常

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Title</title>
    
    

</head>
<body>
    <p>
        Input the order of the matrix
        <br />
        
        <input type="text" maxlength="3" name="value" id='valuee' value='5'/>
            </p>
    

            <button id="myButton">Click me!</button>

            

</body>

<script type="text/javascript" src="bundle.js"></script>
</html>

index.js(在节点终端中工作的变体)

const fs = require('fs')
const csv = require('fast-csv')
const fpcalc = require('fpcalc');
const express = require('express');

//if (typeof window !== 'undefined') {
    

  function readDb(dbName = 'db.csv') {
    // read JSON object from file
    const data = fs.readFileSync(dbName, 'utf8')
    return JSON.parse(data)
}

function writeDb(obj, dbName = 'db.csv') {
    if (!obj) return console.log('Please provide data to save')
    try {
        fs.writeFileSync(dbName, JSON.stringify(obj))
        return console.log('SAVE SUCESS')
    } catch (err) {
        return console.log('FAILED TO WRITE')
    }
}


//window.myFunction = () => {

  

  const dataObj = {james:'144114'}
    writeDb(dataObj)

    module.exports = { readDb, writeDb }
    console.log('You are on the browser');

    
//}
//}
//else {
//   console.log('You are on the server');
//  }

如果我取消注释 myFunction(从上面) 并在节点中执行操作:browserify index.js > bundle.js

我在访问 localhost/index.html 时得到

**
myFunction it`s not defined** in browser console

任何解决方案?...提前致谢

html button
1个回答
1
投票

注意browserify的输出。

[ jdkfjskdfjdkfjkdjfkd ] ➜ npx browserify index.js > bundle.js
错误:无法遍历依赖图:ENOENT:没有这样的文件或目录, lstat '/REDACTED/jdkfjskdfjdkfjkdjfkd/async_hooks'
/REDACTED/jdkfjskdfjdkfjkdjfkd/node_modules/on-finished/index.js 需要

它抛出错误并生成一个emptybundle.js文件。


fs
模块内置于 Node.js 中。它不能捆绑。它做了浏览器不允许 JavaScript 做的事情。您无法在浏览器中运行您编写的代码。

express
模块依赖于具有相同限制的功能,也不能捆绑。

(我不打算分析

fpcalc
fast-csv
看他们是否也这样做)。


你没有使用

express
所以你可以从你的脚本中删除它。

您可以将

fs
替换为替代方案(例如将数据保存在 localStorage 中或使用
<input type="file">
FileReader
加载文件并通过生成
data:
方案 URL 并使用
<a download href="data:...">
来编写它们),然后是您的脚本可能在浏览器中运行。

© www.soinside.com 2019 - 2024. All rights reserved.