javascript - 我无法在网络扩展中使用 express 和 fetch
问题描述
我正在尝试使用一些 NPM 库(例如 sqlite3 和 express)构建 Web 扩展。我使用 browserify 生成了一个捆绑脚本,并在脚本标签中需要它,但是当我打开扩展程序时,它显示一条错误消息,说http.ServerResponse is undefined
(for express) 和
stream is undefined
(for sqlite3)
清单.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>
短.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 临时网络扩展的服务不像 localhost 那样像服务器一样工作。
作为一个普通的节点应用程序,它工作得很好。
有任何想法吗?
解决方案
推荐阅读
- strapi - 如何通过strapi中的“文件上传”页面增加要加载的最大文件大小?
- latex - 为方程式 LaTex 创建环境
- php - 在 laravel 中存储来自 foreach 循环的数组
- python-3.x - 将值传递给按钮单击事件
- kotlin - 尝试将 Kotlin 实体化类型参数与库类一起使用
- apache-zookeeper - zookeeper:线程“main”中的异常 java.lang.NoClassDefFoundError:org/apache/jute/InputArchive
- laravel - 为什么 laravel 审计不起作用?
- python - 使用 Python Azure CLI 将管道变量发送到 popen 命令
- python - 如何在 VBA Excel 中检测 shell 脚本的执行结束?
- tensorflow - 室内点云实例分割训练