我正在尝试从我的chrome扩展程序向我的node.js服务器发送POST请求,然后让服务器将JS文件发送回我的扩展程序。这样做的最佳方式是什么?
目前尝试了这个:
Server.js
function sendJSfile(req, res) {
var body = req.body.apples
console.log(body)
if (body.length >= 3) {
console.log("Long!")
} else{
console.log("Short!")
res.writeHead(200, {"Content-Type": "text/javascript"});
fs.createReadStream("./manual.js").pipe(res);
}
}
Client.js
request("https://61d6b1ac.ngrok.io/api/panels/hitme", "post", "JSON", {apples})
.done(function(res){
console.log(res)
})
})
function request(url, method, dataType, data){
return $.ajax({
url: url,
method: method,
dataType: dataType,
data: data
})
}
答案 0 :(得分:0)
我可以注意到的一件事是你已经编写了AJAX以从服务器接收JSON数据,但是从服务器发送内容类型为javascript,这可能不起作用。
另外根据您的问题,您希望将js文件发送回客户端。有三种方法可以做到这一点 -
您可以将JS文件的内容作为字符串发送,然后在您的ajax成功响应中执行。这是不好的方法。
您可以从NodeJS服务器发送JS文件的公共URL,然后使用<script>
标记,您可以在JS中下载它。
如果您了解客户的公共JS网址,也可以使用$.getScript
。
就上述服务器代码而言,您可以从服务器返回JS内容,如下所示 -
function sendJSfile(req, res) {
var body = req.body.apples
console.log(body)
if (body.length >= 3) {
console.log("Long!")
// here you will need to send error or something to the request
res.send();
} else{
console.log("Short!")
res.writeHead(200, {"Content-Type": "text/javascript"});
//fs.createReadStream("./manual.js").pipe(res);
// if you want to send manual.js content, then this can be sent as following
var readStream = fs.createReadStream("./manual.js");
readStream.on('open', function () {
// This just pipes the read stream to the response object (which goes to the client)
readStream.pipe(res);
});
// This catches any errors that happen while creating the readable stream
readStream.on('error', function(err) {
res.end(err);
});
}
}