节点模块Knex.js和browserify问题

时间:2020-07-03 07:10:28

标签: node.js browserify knex.js

我有一个名为product的节点模块,该模块使用knex.js和sqlite3,在节点上运行良好。现在,我试图通过使用browserify在浏览器上运行它,方法是在HTML中包含由browserify生成的bundle js文件,如下所示

<script src="product.bundle.js"></script>

以下是节点和npm版本:

Node: 12.18.0
npm: 6.13.7

Package.json:

{
  "name": "product",
  "version": "1.0.0",
  "description": "knexjs sample module",
  "main": "product.js",
  "dependencies": {
    "knex": "^0.21.1",
    "sqlite3": "^4.2.0",
    "browserify": "^16.5.1"
  }
}

product.js

const sqlite = require( 'sqlite3' )

const knex = require('knex')({
    client: 'sqlite3',
    connection: {
        filename: "./mysqlitedb.sqlite"
      }
});

module.exports = {
    init: function(){
        knex.schema.createTable('products', (table) => {
            table.increments('id')
            table.string('code')
            table.string('description')
            table.string('price')
        }).then(() => console.log("table created"))
            .catch((err) => { console.log(err); throw err })
            .finally(() => {
                knex.destroy();
            });
    },
    insertIntoProductsTable: function(){
        const products = [
            { code: 'Product code 1', description:'Product desc 1', price: '11.00' }
        ]
        
        knex('products').insert(products).then(() => console.log("data inserted"))
            .catch((err) => { console.log(err); throw err })
            .finally(() => {
                knex.destroy();
            });
    },
    getAllProducts: function(){
        knex.raw( 'select * from products' )
        .then( function( products ){
            console.log( products )
        })
        .catch( function( err ){
            console.log( err )
        })
        .finally(() => {
            knex.destroy();
        });
    }
}

使用命令“ browserify product.js -o product.bundle.js”获得product.bundle.js文件。 当尝试在浏览器上加载该文件时,出现以下错误:

enter image description here

enter image description here

请让我知道,如果我丢失了任何东西,或者是否有任何链接可以检查是否实现了类似的功能?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的错误告诉您stream模块(通常存在于节点环境中)在浏览器环境中不存在。对于许多节点先决条件(例如fs),这是正确的。 SQLite3还具有本地编译代码组件,该组件肯定不会在浏览器中运行。最好将数据存储在服务器上,或者使用其他技术进行本地存储。