Skip to content

http

javascript
const fs = require('node:fs')
const http = require('node:http')
const path = require('node:path')
const mime = require('mime')

const server = http.createServer((req, res) => {
    const { url } = req
    res.statusCode = 200 // 设置响应 code
    res.setHeader('content-Type', 'text/html; charset=utf-8')
    switch (url) {
        case '/':
            res.end('<h1>hello world</h1>')
            break
        case '/a':
            res.end('hello world::a')
        case '/html':
            fs.readFile('./index.html', (err, data) => {
                if (err) throw err
                res.end(data)
            })
            break
        // 处理静态资源,配合 mime 库,由文件的后缀名得到对应的 mime types,进行 content-Type 设置
        case url.startsWith('/assets/'):
            fs.readFile(`.${url}`, (err, data) => {
                if (err) {
                    return handle404()
                }
                const contentType = mime.getType(path.extname(url))
                res.setHeader('content-Type', contentType)
                res.end(data)
            })
            break
        default:
            handle404()
    }
    function handle404() {
        res.statusCode = 404 // 设置响应 code
        res.setHeader('content-Type', 'text/plain;')
        res.end('404 Not Found.')
    }
})

server.listen(8000, '127.0.0.1', () => {
    console.log('running on 127.0.0.1:8000')
})

art-template 模板语法,将动态数据渲染到 html 页面中

javascript
const template = require('art-template')

const ret = template.render(
    `<html>
<p>hello {{message}}</p>
<ul>
 {{each todoes}}
  <li>{{$value.title}}</li>
 {{/each}}
</ul>
</html>`,
    {
        message: 'world',
        todoes: [{ title: 'todo1' }],
    }
)

fs.readFile('./index.html', (err, data) => {
    if (err) return
    // data 是 Buffer 类型,需要先转成字符串进行操作
    const html = template.render(data.toString(), {
        message: 'world',
        todoes: [{ title: 'todo1' }],
    })
    res.end(html)
})