千家信息网

nodejs中怎么构建一个http服务

发表于:2025-01-29 作者:千家信息网编辑
千家信息网最后更新 2025年01月29日,nodejs中怎么构建一个http服务,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。内容索引:Node中的http模块使
千家信息网最后更新 2025年01月29日nodejs中怎么构建一个http服务

nodejs中怎么构建一个http服务,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

内容索引:
  • Node中的http模块

  • 使用node构建http服务

  • 实现一个静态资源服务器

  • 使用模板引擎处理动态网页

  • 结合数据库渲染动态页面

  • 实现一个留言本案例

  • 第三方HTTP服务框架

Node中的http模块
  • TCP和UDP 都属于传输层协议

  • HTTP,用于浏览器和服务器端进行通信,由于HTTP协议本身并不考虑数据如何传输等其他问题,所以属于应用层协议。

  • Node提供了基本的http和https模块用于HTTP 和 HTTPS的封装

const http = require('http')const server = http.createServer()
1.1Server实例
API说明
Event: 'close'服务器关闭时触发
Event: 'request'服务器收到请求消息时触发
server.close()关闭服务
server.listening获取服务状态
1.2 请求对象
API说明
request.method请求方法
request.url请求路径
request.header请求头
request.httpVersioni请求http协议版本
1.3 响应对象
API说明
response.end()结束响应
response.setHeader(name, value)设置响应头
response.removeHeader(name, value)删除响应头
response.statusCode设置响应状态码
response.statusMessage设置响应状态短语
response.write()写入响应数据
response.writeHead()写入响应头
2.1 hello world
const http = require('http');const path = require('path');const mimie = require('mime'); // 返回扩展名对应的content-typeconst fs = require('fs');const hostname = '127.0.0.1';const port = 3000;const server = http.createServer((req, res) => {  // res.setHeader('Content-type', 'text/plain charset=utf-8'); // 响应字符串  const url = req.url;  if (url === '/') {    fs.readFile(`./index.html`, (err, data) => {      if (err) {        throw err;      }      res.statusCode = 200;      res.setHeader('Content-type', 'text/html; charset=utf-8'); // 响应html      res.end(data);    });  } else if (url.startsWith('/assets/')) {    fs.readFile(`.${url}`, (err, data) => {      if (err) {        res.setHeader('Content-type', 'text/plain; charset=utf-8');        res.statusCode = 404;        res.end('404 Not Fund.');      }      // path.extname(url) 获取文件对应的扩展名      const contentType = mimie.getType(path.extname(url));      res.statusCode = 200;      res.setHeader('Content-type', `${contentType}; charset=utf-8`); // 设置响应头      res.end(data);    });  } else {    res.statusCode = 404;    res.setHeader('Content-type', 'text/plain; charset=utf-8');    res.end('404 Not Fund.');  }  // console.log('req', Object.keys(req));});server.listen(port, hostname, () => {  console.log(`server running at http://${hostname}:${port}`);});
  • contentType对照表:http://tool.oschina.net/commons

常用模板引擎:
  • marko

  • nunjucks

  • handlebars.js

  • ejs

  • Pug

  • art-template

template-engine.js

const http = require('http');const path = require('path');const fs = require('fs');const template = require('art-template');const hostname = '127.0.0.1';const port = 3000;const server = http.createServer((req, res) => {  const url = req.url;  const fileBaseUrl = path.join(__dirname);  if (url === '/') {    fs.readFile('./template-engine.html', (err, data) => {      data = data.toString();      const ret = template.render(data, {        msg: 'world',        todos: [          { title: '吃饭', completed: false },          { title: '睡觉', completed: true },          { title: '打豆豆', completed: false }        ]      });      res.setHeader('Content-type', 'text/html charset=utf-8'); // 响应字符串z      res.end(ret);      res.statusCode = 200;    });  }});server.listen(port, hostname, () => {  console.log(`server running at http://${hostname}:${port}`);});

template-engine.html

                  Document        
我是我{{ msg }}
    {{ each todos }}
  • {{ $value.title }}
  • {{ /each }}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

0