原生NodeJS搭建后端服务器

114 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

Hello World

需求:浏览器文本内容Hello World

const http = require('http')

const server = http.createServer((req, res) => {
  res.writeHead(200, {
    'Content-type': 'text/plain',  
  })
  res.write('Hello World!')
  res.end()
})

server.listen(8000, '127.0.0.1', () => {
  console.log('Listening to port 8000...')
})

代码说明:

  • 使用http模块的createServer的方法创建服务器实例server
  • 使用res.writeHead定义响应的内容,案例中设置了状态码和文件类型
  • 使用res.write向可写流res中写入数据,然后用res.end发送数据
  • 使用server实例的listen方法开启服务器,并设置端口和地址

浏览器中的输出结果:

image.png

读取JSON数据

const http = require('http')

const myJsonData = {
  status: 'success',
  data: {
    id: '5b8b9572e116fb3714e6faba',
    content: '君问归期未有期,巴山夜雨涨秋池。',
    origin: {
      title: '夜雨寄北',
      dynasty: '唐代',
      author: '李商隐',
    },
  },
}

const server = http.createServer((req, res) => {
  res.writeHead(200, {
    'Content-type': 'application/json',
  })
  res.write(JSON.stringify(myJsonData))
  res.end()
})

server.listen(8000, '127.0.0.1', () => {
  console.log('Listening to port 8000...')
})

代码说明:

  • Content-type类型设置为application/json
  • resp.write的参数是字符串类型,所以使用JSON.stringify处理对象

浏览器中的输出结果:

image.png

添加路由

// ...省略相同的代码
const server = http.createServer((req, res) => {
  const pathName = req.url
  // Overview Page
  if (pathName === '/' || pathName === '/overview') {
    res.end('overview page')
    // Project Page
  } else if (pathName === '/product') {
    res.end('product page')
    // API Page
  } else if (pathName === '/api') {
    res.writeHead(200, {
      'Content-type': 'application/json',
    })
    res.end(JSON.stringify(myJsonData))
    // Not Found
  } else {
    res.writeHead(404, {
      'Content-type': 'text/html',
    })
    res.end('<h1>not found</h1>')
  }
})
// ...省略相同的代码

代码说明:

  • 通过req.url的值区别不同路由页面
  • if..else...语句中定义页面内容

未找到页面时的显示如下:

image.png

image.png

参考资料:

使用NodeJS创建HTTP服务器 - 掘金 (juejin.cn)

创建 HTTP 服务器 · 语雀 (yuque.com)

使用Node.js原生API写一个web服务器 - 掘金 (juejin.cn)