小编Nad*_*mad的帖子

不是具有异步功能的构造函数

我试图在 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() …

javascript node.js phantomjs

5
推荐指数
1
解决办法
1954
查看次数

刷新页面时套接字 IO 进行多个连接 - Node JS

我开发了一个抓取工具,可以从所有网站上抓取工作并将它们保存到数据库中。我已经制作了自己的默认日志,用于获取消息(错误、信息)等。我正在使用 socket.io 实时更新我的​​视图和数据库。

问题是当我启动应用程序时,它完美地获得了套接字和数据库连接。但是当我尝试刷新页面时,使用相同的消息和不同的 ID 再次建立了相同的连接两次。我刷新页面,连接已建立,id 已更改,但对于所有已建立的连接,它们使用一个 ID,

以下是显示它的日志:

在此处输入图片说明

我已经上传了这个视频,请也检查一下。试着看一开始,然后 at01:4103: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)

websocket node.js socket.io socket.io-1.0

4
推荐指数
2
解决办法
1万
查看次数

ER_PARSE_ERROR:你的 SQL 语法有错误 - Node JS

嗨,我正在使用节点 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% ”附近使用的正确语法

表结构是这样的:

在此处输入图片说明

mysql node.js

2
推荐指数
1
解决办法
9394
查看次数

如何在执行期间停止函数 - JavaScript

如何停止/终止已执行且仍在运行的功能?例如,我有这个功能:

function foo() {
  setInterval(function() {
    console.log("Foo Executed !");
  }, 3000);
}
foo();
Run Code Online (Sandbox Code Playgroud)

现在,这个foo()函数将运行无限时间,当一个特定事件发生时,假设已经点击了一个停止按钮,然后我想停止这个功能.

在我的情况下,该功能没有setInterval()功能.如果foo()函数没有setInterval()方法,但只是执行了很多代码行,我想阻止它在特定事件后执行.

javascript

1
推荐指数
1
解决办法
5448
查看次数