Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在nodejs中编写函数,并使其显示在视图中_Javascript_Html_Node.js_Express - Fatal编程技术网

Javascript 在nodejs中编写函数,并使其显示在视图中

Javascript 在nodejs中编写函数,并使其显示在视图中,javascript,html,node.js,express,Javascript,Html,Node.js,Express,所以我正在抓取一个网站,我想让它向innerHTML显示数据,但我很难让它正常工作。我正在尝试使用 document.getElementById('results').innerHTML = searchJobs(''); 但它告诉我文档没有定义,抱歉,没有问题,但问起来比在同一件事情上停留45分钟要容易得多 代码如下: function searchJobs(i) { const url = axios.get('actualurl') return fetch(`${ur

所以我正在抓取一个网站,我想让它向innerHTML显示数据,但我很难让它正常工作。我正在尝试使用

document.getElementById('results').innerHTML = searchJobs('');
但它告诉我文档没有定义,抱歉,没有问题,但问起来比在同一件事情上停留45分钟要容易得多

代码如下:

function searchJobs(i) {
    const url = axios.get('actualurl')
    return fetch(`${url}${i}`)
        .then(response => response.text())
        .then(res => {
            const jobs = [];
            const jobsBody = [];
            const $ = cheerio.load(res.data);

            $('.result').each((index, element) => {
                const title = $(element).children('.title').text();
                const linkToJob = $(element).children('.title').children('a').attr('href')
                const body = $(element).children('.summary').text();
                jobs[index] = { title, linkToJob, body };
            });

            return jobs;
 
        });
}
document.getElementById('results').innerHTML = searchJobs('');
module.exports = searchJobs;
我可以把刮板刮到console.log上

索引路径:

const express = require('express');
const router = express.Router();
const scraper = require('../scrapers/scrapers');

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});
app.js:

const express = require('express'),
    path = require('path'),
    cookieParser = require('cookie-parser'),
    logger = require('morgan'),
    puppeteer = require('puppeteer'),
    axios = require('axios'),
    cheerio = require('cheerio');
es6Renderer = require('express-es6-template-engine');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.engine('html', es6Renderer);
app.set('views', './views');
app.set('view engine', 'html');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;
我认为问题实际上是在这样一种观点中,即基本上只是为了保持文章简短:

<body>
        <p id="results"></p>
        <script src="/scrapers/scrapers.js" async defer></script>
    </body>


我想我理解你想要实现的目标。从scrapers.js中删除
document.getElementById
行,并修改其他行,如下所示:

索引路径:

router.get('/',函数(req,res,next){
res.render('index',{locals:{results:scraper.searchJobs()}});
});
视图:


${results}


通过这样做,您可以在节点内部的服务器上运行scraper,然后使用模板引擎将结果呈现到HTML中,然后再将其发送到浏览器。

node.js中没有
文档
对象。这将只存在于浏览器或类似浏览器的环境中(例如,cheerio创建的仅存在于该cheerio上下文中)。另外,
searchJobs()
返回一个您似乎没有正确使用的承诺。您能告诉我们您试图在哪里使用
searchJobs()
函数,并准确描述您试图用它完成的任务吗?您是否正在尝试将作业数据插入web服务器正在呈现的页面?如果是这样的话,那是哪条路线?当你说你可以把刮刀拿到console.log就好了,你的意思是登录服务器还是浏览器?@ajaybee我把它拿到console上了lol。。我可以返回作业,然后返回console.log(searchJobs())哪个控制台?节点应用程序可以将console.log发送到服务器控制台。浏览器JavaScript将console.log发送给浏览器开发人员console@ajaybee我假设我的服务器终端不在chrome中。感谢您的帮助,现在我收到一个新错误,不确定是否在正确的轨道上,它告诉我“无法在视图目录中查找视图”错误。/views“它正在您的视图目录中查找error.html文件很抱歉,这很明显,每当使用诸如express和node之类的工具时,这些错误都会让人非常困惑。我只是养成了检查模型>路由>视图是否有错误的习惯,而不是真正注意错误。”。。有时候,现在。它告诉我searchJobs不是一个函数。。尽管我需要“./scrasters/scrasters”,其中包含该功能。您将搜索作业导出为scraster,因此只需调用
scraster()