私は、あまりwebプログラミングをしてきませんでした。
夏ごろから勉強をしております。
一応Python + Djangoで一冊こなしたものの、Node.jsが気になって仕方がないので、今回勉強しています。
今は、express-generatorをインストールして、VS Codeでjs, ejsを編集してきました。
ところが、今回エラーに遭遇したので、投稿しました。
RSSを受信してクライアントに表示するコーディングをしていました。
最初、以下のようなコードを、jsに置きました。
const express = require('express'); const router = express.Router(); const http = require('https'); const parseString = require('xml2js').parseString; /* GET home page. */ router.get('/', (req, res, next) => { var opt = { host: 'news.google.com', port: 443, path: '/rss?hl=ja&ie=UTF-8&oe=UTF-8&gl=JP&ceid=JP:ja', } http.get(opt, (res2) => { var body = ''; res2.on('data', (data) => { body += data; }); res2.on('end', () => { parseString(body.trim(), (err, result) => { var data = { title: 'Google News', content: result.rss.channel[0].item }; res.render('hello', data); }); }); res2.on('error', function(err) { console.log("something wrong"); }); }); }); module.exports = router;
これを、VS Codeのターミナルから npm start コマンドで起動したのですが、ブラウザでは一応は表示されるようなのですが、サーバーは落ちました。
node:events:371
throw er; // Unhandled ‘error’ event
^
Error: read ECONNRESET
at TLSWrap.onStreamRead (node:internal/stream_base_commons:211:20)
Emitted ‘error’ event on ClientRequest instance at:
at TLSSocket.socketErrorListener (node:_http_client:447:9)
at TLSSocket.emit (node:events:394:28)
at emitErrorNT (node:internal/streams/destroy:157:8)
at emitErrorCloseNT (node:internal/streams/destroy:122:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21) {
errno: -54,
code: ‘ECONNRESET’,
syscall: ‘read’
いろいろ調べて、エラー補足できていないのかと考え、
res2.on('end', () => { console.log('end'); parseString(body.trim(), (err, result) => { if(err) { console.log('err:'+err); throw err; } console.log(result) var data = { title: 'Google News', content: result.rss.channel[0].item }; res.render('hello', data); }); }); res2.on('error', function(err) { console.log("something wrong"); });
などとしてみましたが、補足できず、変わりませんでした。
最後に、OSのターミナルでは、環境が違うのか?と気付き、実行してみると、正常に動きました。
そこで、問題は、expressコマンドのパスが通っていないことが原因だとわかりました。