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)
})