将值从spookyjs环境存储到mongoDB

我试图通过spookyjs从网站上刮取数据,并存储在mongoDB中 。我能够从网站获取数据。但不能保存从spookyjs环境中刮取的数据到mongoDB。为了保存刮取的数据,我将我的数据库模型实例spookyjs。我在下面的链接中提到它。

https://github.com/SpookyJS/SpookyJS/wiki/Introduction

以下是我在prod_link_infovariables中提取数据并将其值传递给mongoDB的代码

var product_model = require('./product').product_model; //get results spooky.then([{product_model:product_model},function(){ this.waitForSelector('li[id^="product_"]', function() { // Get info on all elements matching this CSS selector var prod_link_info = this.evaluate(function() { var nodes = document.querySelectorAll('li[id^="product_"]'); return [].map.call(nodes, function(node) { // Alternatively: return Array.prototype.map.call(... return node.querySelector('a').getAttribute('href')+"\n"; }); }); //insert values in mongodb for (var i = 0; i < prod_link_info.length; i++) { product_model.create( { prod_link_info:prod_link_info[i], }, function(err, product){ if(err) console.log(err); else console.log(product); }); } }); }]); 

以下是上述代码中使用的数据库模式和模型的代码。

 var mongoose=require('mongoose'); var Schema = mongoose.Schema; // create a schema var productSchema = new Schema({ prod_link_info: String, }); var product_model= mongoose.model('product_model', productSchema); module.exports = { product_model: product_model } 

但是,当我运行上面的代码,它给了我下面的错误ReferenceError: Can't find variable: product_model

我想存储从spookyjs提取的数据到mongoDB。请告诉我在哪里做错了。

当你把variables的哈希值传递给怪异的时候,它将被转换成JSON.stringify的string,然后在casper环境中使用JSON.parse转换回一个对象(请参阅文档 )。 所以不可能把mongoose模型传递给casper环境(而且没有实际的理由)。

为了解决这个问题,你应该从Spooky(casper)环境传递数据。 据我所知,唯一的办法是emit数据,然后使用spooky.on处理它。 你的例子应该是这样的:

 var product_model = require('./product').product_model; //get results spooky.then([{},function(){ this.waitForSelector('li[id^="product_"]', function() { // Get info on all elements matching this CSS selector var prod_link_info = this.evaluate(function() { var nodes = document.querySelectorAll('li[id^="product_"]'); return [].map.call(nodes, function(node) { // Alternatively: return Array.prototype.map.call(... return node.querySelector('a').getAttribute('href')+"\n"; }); }); this.emit('data.ready', prod_link_info); }); }]); spooky.on('data.ready', function (prod_link_info) { //insert values in mongodb for (var i = 0; i < prod_link_info.length; i++) { product_model.create( { prod_link_info:prod_link_info[i], }, function(err, product){ if(err) console.log(err); else console.log(product); }); } });