我试图在 JavaScript 中创建一个构造函数,这个构造函数应该是异步的,因为我使用 Phantom JS 模块来抓取数据,所以这就是为什么我必须使用异步函数通过 Phantom JS 和 Node JS 来抓取数据。
下面是我的代码,
const phantom = require('phantom');
async function InitScrap() {
var MAIN_URL = "https://www.google.com/",
//Phantom JS Variables
instance = await phantom.create(),
page = await instance.createPage();
// Load the Basic Page First
this.loadPage = async function() {
console.log("Loading Please wait...");
var status = await page.open(MAIN_URL);
if (status == "success") {
page.render("new.png");
console.log("Site has been loaded");
}
}
}
var s = new InitScrap();
s.loadPage()
// module.exports = InitScrap();Run Code Online (Sandbox Code Playgroud)
但是当我运行这段代码时,它说,
InitScrap() …
我开发了一个抓取工具,可以从所有网站上抓取工作并将它们保存到数据库中。我已经制作了自己的默认日志,用于获取消息(错误、信息)等。我正在使用 socket.io 实时更新我的视图和数据库。
问题是当我启动应用程序时,它完美地获得了套接字和数据库连接。但是当我尝试刷新页面时,使用相同的消息和不同的 ID 再次建立了相同的连接两次。我刷新页面,连接已建立,id 已更改,但对于所有已建立的连接,它们使用一个 ID,
以下是显示它的日志:
我已经上传了这个视频,请也检查一下。试着看一开始,然后 at01:41和03:06,在第一个网站开始抓取之前建立连接,但是当第二个网站抓取开始时,Internet Connection消息给出两次,同样代表第三个网站抓取开始时,消息数量每次都翻倍。我不知道为什么。
我试过按照这个问题的答案,但仍然没有成功。server文件上的代码有 600 多行,第二个文件有 150 多行,在客户端也是如此,这就是为什么我不能全部上传,而且有点保密。
但是客户端和服务器端的socket连接是这样的:
服务器端
const express = require("express");
const app = express();
const scrap = require("./algorithm");
const event = scrap.defEvent;//imported from another file
const ms_connect = scrap.ms_connect;
const server = app.listen(8000, function(){ console.log('Listening on 8000'); });
const io = require("socket.io").listen(server);
const internetAvailable = require("internet-available");
app.use(express.static(__dirname + "/"));
app.get("/scrap",function(req,res){
res.sendFile(__dirname+"/index.html");//Set the Default Route
io.on("connection",function(socket){ …Run Code Online (Sandbox Code Playgroud)嗨,我正在使用节点 js 处理 mysql 数据库。大部分数据都被插入了,但此时查询卡住了,我不知道为什么。我试过了mysql.escape(),utf8.encode()但仍然是同样的错误。
这是我的查询
ms_connect.query("INSERT INTO `companies_jobs` VALUES (null, '"+mysql.escape(data[i].title)+"','"+mysql.escape(data[i].link)+"','"+mysql.escape(data[i].date)+"','"+mysql.escape(data[i].level)+"','"+mysql.escape(data[i].category)+"','"+mysql.escape(data[i].function)+"','"+mysql.escape(data[i].loc)+"','"+mysql.escape(data[i].timing)+"','"+mysql.escape(data[i].company)+"','"+JSON.stringify(time)+"','"+JSON.stringify(date)+"',"+1+")", function(err, row){
if(err){
console.log(data[i]);
throw err;
} else{
i++;
s();
}
})Run Code Online (Sandbox Code Playgroud)
我正在尝试将此数据插入数据库:
[{
category: 'Sales',
company: '',
date: 'Posted on 12/06/2018',
function: '',
level: 'Students',
link: 'https://career5.successfactors.eu/career?career%5fns=job%5flisting&company=LiMySLive&navBarLevel=JOB%5fSEARCH&rcm%5fsite%5flocale=en%5fUS&career_job_req_id=13305&selected_lang=es_ES&jobAlertController_jobAlertId=&jobAlertController_jobAlertName=&_s.crb=fl08QG2oV1akJFW%2fWVQ4Ol50v%2bs%3d',
loc: 'Chile (CL)',
timing: 'full time',
title: 'Alumno en Practica'
}]Run Code Online (Sandbox Code Playgroud)
但由于某种原因,我收到此错误:
ER_PARSE_ERROR:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行的“Alumno en Practica”、“ https://career5.successfactors.eu/career?career%5fns=job% ”附近使用的正确语法
表结构是这样的:
如何停止/终止已执行且仍在运行的功能?例如,我有这个功能:
function foo() {
setInterval(function() {
console.log("Foo Executed !");
}, 3000);
}
foo();Run Code Online (Sandbox Code Playgroud)
现在,这个foo()函数将运行无限时间,当一个特定事件发生时,假设已经点击了一个停止按钮,然后我想停止这个功能.
在我的情况下,该功能没有setInterval()功能.如果foo()函数没有setInterval()方法,但只是执行了很多代码行,我想阻止它在特定事件后执行.