博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js 服务器
阅读量:6157 次
发布时间:2019-06-21

本文共 2934 字,大约阅读时间需要 9 分钟。

接收请求

我们的脚本只需要一个文件就可以搞定

  1. 新建一个安全的目录,不需要我重复强调吧?
    cd ~/Desktop; mkdir node-demo; cd node-demo
  2. touch server.js
  3. 编辑 server.js,。
    curl https://raw.githubusercontent.com/FrankFang/nodejs-test/7f1a0ce15c47a6c2c938fe322f042e5d62bc7d01/server.js > server.js
    cat server.js
  4. 运行 node server 或者 node server.js,看到报错
  5. 根据报错提示调整你的命令
  6. 成功之后,这个 server 会保持运行,无法退出
    • 如果你想「中断」这个 server,按 <kb>Ctrl</kbd> + <kbd>C</kbd> 即可(C 就是 Cancel 的意思)
    • 中断后你才能输入其他命令
    • 我建议你把这个 server 放在那里别动,新开一个 Bash 窗口,完成下面的教程

好了服务器完成。只不过

  1. 这个服务器目前只有一个功能,那就是打印出路径和查询字符串
  2. 还缺少一个重要的功能,那就是发出 HTTP 响应

目前我们先只做一个功能玩玩。

接下来你要发起一个请求到这个服务器。这听起来有点怪异,「我向自己发起请求」,目前是的,因为你买不起服务器啊。

在新的 Bash 窗口运行 curl http://localhost:你的指定的端口/xxx 或者 curl http://127.0.0.1:你指定的端口/xxx

你会马上发现 server 打印出了路径:

  1. 这说明我们的 server 收到了我们用 curl 发出的请求
  2. 由于 server 迟迟没有发出响应,所以 curl 就一直等在那里,无法退出(用 <kb>Ctrl</kbd> + <kbd>C</kbd> 中断这个傻 curl)

发出响应

接下来我们让我们 server 发出响应

  1. 编辑 server.js
  2. 在中间我标注的区域添加两行代码
    response.write('Hi') response.end()复制代码
  3. 中断之前的 server,重新运行 node server 8888
  4. curl http://127.0.0.1:8888/xxx,结果如下:
    Hi%复制代码
    这个 % 不是我们的内容,% 表示结尾。别再问我了。如果你看 % 不爽,就把 'Hi' 换成 'Hi\n'。
  5. 好了,响应添加成功
  6. 使用 curl -s -v -- "http://localhost:8888/xxx" 可以查看完整的请求和响应(上节课的内容)

根据请求返回不同的响应

  1. 响应 /
  2. 响应 /xxx
  3. 响应 404
  4. 响应 /xxx.html
  5. 响应 /xxx.frank
  6. 再次强调,后缀是废话。文件内容是有 HTTP 头中的 Content-Type 保证的
  7. 响应 /xxx.css
  8. 响应 /xxx.js
  9. HTTP 路径不是文件路径!!!/xxx.html 不一定对应 xxx.html 文件
  10. HTTP 路径不是文件路径!!!/xxx.html 不一定对应 xxx.html 文件
  11. HTTP 路径不是文件路径!!!/xxx.html 不一定对应 xxx.html 文件

上传代码供以后复习

  1. 在 GitHub 创建新的空 repo,名称为 node-demo
  2. 按照 GitHub 的提示上传代码

这是完整的代码

var http = require('http')var fs = require('fs')var url = require('url')var port = process.argv[2]if(!port){  console.log('请指定端口号好不啦?\nnode server.js 8888 这样不会吗?')  process.exit(1)}var server = http.createServer(function(request, response){     var parsedUrl = url.parse(request.url, true)  var path = request.url   var query = ''  if(path.indexOf('?') >= 0){ query = path.substring(path.indexOf('?')) }  var pathNoQuery = parsedUrl.pathname  var queryObject = parsedUrl.query  var method = request.method  /******** 从这里开始看,上面不要看 ************/  console.log('HTTP 路径为\n' + path)  if(path == '/style.js'){    response.setHeader('Content-Type', 'text/css; charset=utf-8')  //content-type:规定后面的内容类型,                                                                   //utf-8:规定可以使用汉字    response.write('body{background-color: #ddd;}h1{color: red;}')    response.end()  }else if(path == '/script.html'){    response.setHeader('Content-Type', 'text/javascript; charset=utf-8')    response.write('alert("这是JS执行的")')    response.end()  }else if(path == '/index.css'){    response.setHeader('Content-Type', 'text/html; charset=utf-8')    response.write('\n'  +       '
' + '' + '

你好

' + '' + '') response.end() }else{ response.statusCode = 404 response.end() } /******** 代码结束,下面不要看 ************/})server.listen(port)console.log('监听 ' + port + ' 成功\n请用在空中转体720度然后用电饭煲打开 http://localhost:' + port)复制代码

转载于:https://juejin.im/post/5a6d829851882535a554760f

你可能感兴趣的文章
EF4.1中诡异的GUID为空问题
查看>>
用开源NAC阻止非法网络访问
查看>>
svn 建子项目的方法
查看>>
ext3文件系统反删除利器ext3grep应用实战
查看>>
大数据量生成工具源代码(Delphi)
查看>>
Redis 数据结构与内存管理策略(上)
查看>>
CSDN2008最有价值博客获奖感言--放飞梦想,让我们扬帆远航
查看>>
调试技巧--Windows端口号是否被占用
查看>>
iOS中的长文本高度计算
查看>>
爪哇国新游记之十----异常初相识
查看>>
Windows 8常用快捷键
查看>>
Oracle EBS R12.1.1 应用克隆 - 2
查看>>
邮件服务器之微软Exchange server (转)
查看>>
图解Skip List——本质是空间换时间的数据结构,在lucene的倒排列表,bigtable,hbase,cassandra的memtable,redis中sorted set中均用到...
查看>>
AngularJS快速入门指南14:数据验证
查看>>
归并排序的分析与Java实现
查看>>
springcloud(二):注册中心Eureka
查看>>
如何遍历维数和各维上限未定的多维数组
查看>>
Git 常用命令速查表(图文+表格)【转】
查看>>
提问的智慧 如何得到好的帮助(转)
查看>>