Javascript 在nodejs中编写函数,并使其显示在视图中
所以我正在抓取一个网站,我想让它向innerHTML显示数据,但我很难让它正常工作。我正在尝试使用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
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()