DEV Community

loading...

Let's make a small web app by nodejs.

callas1900 profile image r_tanaka Updated on ・1 min read

Write a small node web app with display a result of a rest api.

1. No framework

preparation for local server

mkdir sample
cd sample
npm init

find a sample rest api server

my recommendation is
https://catfact.ninja/fact

var http = require('http'),
    https = require('https')

http.createServer((req, res) => {
    console.log(req.url)
    https.get('https://catfact.ninja/fact', (r) => {
        console.log(r.statusCode)
        r.on('data', (d) => {
            obj = JSON.parse(d)
            res.writeHead(200, {'Content-Type': 'text/html'})
            res.write(`<h1>${obj.fact}</h1>`)
            res.write(`<h2>${obj.length}</h2>`)
            res.end()
        })
    }).on('error', (e) => {
        console.error(e)
    })

}).listen(8080)

2. Let's use Express

Why Express?

Above code has 2 issues.

  1. Unexpected 2 request to the catfact occurs because of favicon.
  2. No process deal with http chunk.

Using the Express is easy way to fix 1st one.

installation web framework

npm install express --save
var express = require('express'),
    app = express(),
    https = require('https')

app.get('/', (req, res) => {
    let data = ''
    https.get('https://catfact.ninja/facts?limit=1000', (r) => {
        console.log(r.statusCode)
        r.on('data', (chunk) => {
            data += chunk
        })
        r.on('end', () => {
            objs = JSON.parse(data)
            let msg
            objs.data.forEach((obj) => msg += `<h1>${obj.fact}</h1>`)
            res.send(msg)
        })
    }).on('error', (e) => {
        console.error(e)
    })
})
app.listen(8080)

Appendix

If you want to pack your app in a docker container.
Read below.

https://nodejs.org/en/docs/guides/nodejs-docker-webapp/

Discussion (0)

pic
Editor guide