我无法在网络扩展程序中使用 express 和 fetch

问题描述

我正在尝试使用一些 NPM 库(例如 sqlite3 和 express)构建 Web 扩展。 我使用 browserify 生成一个包脚本并在脚本标签中需要它,但是当我打开扩展程序时,它显示一条错误消息,说 http.ServerResponse is undefined(用于 express)和 stream is undefined(对于 sqlite3

manifest.json:

{

  "manifest_version": 2,"name": "jpfShortener","version": "1.0","browser_action": {
    "default_title": "jpfShortener","default_popup": "menu/jpfShortener.html"
},"content_security_policy":  "script-src 'self' 'unsafe-eval'; object-src 'self'","icons": {
    "48": "icons/48.png"
  },"permissions": [
    "<all_urls>"
  ],"content_scripts": [
    {
      "js": ["menu/jpfShortener.js"],"matches": ["<all_urls>"]
    }
  ]

}

html 的头部:

<head>
    <Meta charset="UTF-8">
    <Meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>jpfShortener</title>
    <link rel="stylesheet" href="jpfShortener.css"/>
    <script src="../bundleScripts/bundle.js" defer></script>
    <script src="../server.js" defer></script> 
    <script src="../short.js" defer></script> 
</head>

short.js:

document.getElementById("shortbtn").onclick = function() {short()};

function short() {

  var data = { url: document.getElementById("url").value };

  fetch("/addLink",{
    method: "POST",body: JSON.stringify(data),headers: { "Content-Type": "application/json" }
  })
    .then(res => res.json())
    .then(res => {
      console.log(JSON.stringify(res));
    })
    .catch(err => console.log(err));

  document.getElementById("url").value = "";
  document.getElementById("url").focus();
};

server.js:

onload = function(){
  console.log("teseeeete");
  const bodyParser = require("body-parser");
  const express = require("express");
  const fs = require("fs");
  const sqlite3 = require("sqlite3").verbose();
  var app = express();

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var listener = app.listen("8080",() => {
  console.log(`Your app is listening on port ${listener.address().port}`);
});

const dbFile = "data/jpfshortener.db";
const exists = fs.readFileSync(dbFile);

const db = new sqlite3.Database(dbFile);

...

app.post("/addLink",(req,res) => {

  //some code
  
});

...

};

我还尝试捆绑我的 server.js 并将其添加content_scripts,但没有成功。

另外,我无法获取“/addLink”,它找不到网址。我相信这是因为 mozilla 和 google 临时网络扩展的服务不像本地主机那样像服务器一样工作。

作为一个普通的节点应用,它运行得很好。

有什么想法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...