我们这一期做一个简易的http服务器。

先建一个文件夹,就算是一个空的项目了。然后新建app.js和package.json文件。

这样一个简易项目的基本文件就建好了。

通过命令行工具,在项目路径下输入:

E:\project\heron-lesson>npm install express --save

通过npm命令安装最新版的express。我现在的版本是

express@4.12.3 

通过npm install express --save 命令安装的库。会在你的项目里的node_modules文件夹内。同时--save参数会保存项目依赖到package.json文件里。不要忽视package.json文件,他对文件管理起到重要的作用。

回到app.js文件,只需要三行代码,就能完成一个http服务器。

 var express = require('express');
var app = express();
app.listen(3000); // 监听端口3000

推荐使用ide webstorm。授权问题自行百度,你懂的。

直接run app.js

现在这个http服务器占用3000端口,并没有任何的路由,这是我们打开 http://127.0.0.1:3000/ 页面。会看到

Cannot GET /

的提示。

然后我们来编写一个路由

 var express = require('express');

 var app = express();
app.listen(3000); // 监听端口3000 app.get('/', function (req, res) {
return res.send('hello world');
});

rerun app.js

重新访问 http://127.0.0.1:3000/ 页面,就能看到hello world了。

到这里,get请求似乎没有什么问题了。但是如何访问一个页面呢?我们再写一个路由

新建index.html文件在项目根目录。

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
<h2>Index</h2>
</body>
</html>

再接着编写app.js

 var path = require('path');
var express = require('express'); var app = express();
app.listen(3000); // 监听端口3000 // get: /
app.get('/', function (req, res) {
return res.send('hello world');
});
// get: /index
app.get('/index', function (req, res) {
return res.sendFile(path.join(__dirname, 'index.html'));
});

通过导入path,使用path.join函数 配合__dirname来获取文件路径,我们得到index.html的完整地址。并用res.sendFile函数来发送文件到客户端。访问 http://127.0.0.1:3000/index 页面查看效果。

如果你不理解这些函数的意义,请查阅node的api https://nodejs.org/api/path.html#path_path_join_path1_path2 和expressjs的api http://expressjs.com/4x/api.html

再写一个结合post的路由。由于express4+的版本中不封装post的数据,也没集成相关的库。所以这个东西得另外下载。如法炮制使用npm安装

E:\project\heron-lesson>npm install body-parser --save

新建login.html文件到根目录

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="" method="post">
UserName <input type="text" name="userName"/>
Password <input type="password" name="password"/>
<input type="submit"/>
</form>
</body>
</html>

更新app.js代码

 var path = require('path');
var express = require('express')
var bodyParser = require('body-parser'); var app = express();
app.listen(3000); // 监听端口3000 app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true })); // get: /
app.get('/', function (req, res) {
return res.send('hello world');
});
// get: /index
app.get('/index', function (req, res) {
return res.sendFile(path.join(__dirname, 'index.html'));
});
// get: /login
app.get('/login', function (req, res) {
return res.sendFile(path.join(__dirname, 'login.html'));
});
// post: /login
app.post('/login', function (req, res) {
if (req.body.userName === 'admin' && req.body.password === 'password')
return res.send('ok');
else
return res.send('no');
});

至此,简易http服务。正常的get、post请求已经可以处理了。

访问 http://127.0.0.1:3000/login 并输入 admin和password。就能看到ok的提示。

项目地址:demo2

下载后可通过npm install -d 来安装依赖

下一期会讲到如何分离文件,和一些进阶用法。

Node填坑教程——简易http服务器的更多相关文章

  1. Node填坑教程——前言

    Node是什么? Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物 ...

  2. Node填坑教程——HelloWorld

    环境安装(极简): Node需要的环境可以说及其简单,也可以说及其复杂.为什么这么说呢? 如果里只需要运行环境那么到Node官网下载一个包就行了.里面自带npm管理工具,这是包管理工具,以后会频繁的使 ...

  3. Node填坑教程——整理文件

    如果你能把所有代码写进一个文件,并且能很好的管理.协调.多人开发.那么可以跳过这期(请务必带我飞). 我们接着完善上期的代码,给代码分家. node并没有启动入口,更没有固定的项目结构,文件配置.这些 ...

  4. Node填坑教程——过滤器

    所谓“过滤器”,只是一个概念,可以理解是一个路由,也可以理解为一个中间件.原理非常简单,就是利用匹配规则,让其有限匹配在正常的路由前面处理就行了. 比如有如下路由 app.get('/', funct ...

  5. Node填坑教程——常用库

    作为函数式编程来说,流程控制和函数库是必不可少的(应该吧). 下面我们介绍两个常用的库. lodash:完整的api请参阅,https://lodash.com/docs.这里我们只演示几个简单的例子 ...

  6. ReactNative 从环境和第一个demo说起,填坑教程

    一.React-Native MacOS必备环境配置: 1.安装homebrew(这东西可以理解为命令行的app商店) /usr/bin/ruby -e "$(curl -fsSL http ...

  7. backbone新手填坑教程资源

    backbone 入门第二版 http://www.kancloud.cn/kancloud/backbonejs-learning-note/49379 backbone 入门讲解 http://w ...

  8. Vue3+Typescript+Node.js实现微信端公众号H5支付(JSAPI v3)教程--各种填坑

    ----微信支付文档,不得不说,挺乱!(吐槽截止) 功能背景 微信公众号中,点击菜单或者扫码,打开公众号中的H5页面,进行支付. 一.技术栈 前端:Vue:3.0.0,typescript:3.9.3 ...

  9. 即将上线的flume服务器面临的一系列填坑笔记

      即将上线的flume服务器面临的一系列填坑笔记 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.flume缺少依赖包导致启动失败! 报错信息如下: 2018-10-17 ...

随机推荐

  1. Python 目录操作(转)

    在Python中,文件操作主要来自os模块,主要方法如下: os.listdir(dirname):列出dirname下的目录和文件os.getcwd():获得当前工作目录os.curdir:返回当前 ...

  2. IOS ARC和非ARC文件混用

    ARC在SDK4.0的时候增加的,因为要和曾经的项目融合,就会有arc和非arc文件的混合. 当然,也就这两种情况: 1.自己的旧项目没有使用ARC,可是引入的第三方库却是使用了ARC的. 2.自己的 ...

  3. DropDownListFor使用ViewData进行绑定的示例

    特别注意,经实践: 此方法的ViewBag的名称必须和new SelectList()中的最后一个参数,即下拉框的默认值的名称必须相同,如: ViewBag.Title = WebConst.UnSe ...

  4. Before和After用法小结

    Before和After用法小结 定义 :before 选择器在被选元素的内容前面插入内容.:after选择器在被选元素的内容后面插入内容.(注:必须包含content 属性) 一.特性:不能左右:e ...

  5. Android开发手册 (Android的手工教程MtAndroid开发手册)

    放出版许可协议 1.0 或者更新版本号. 未经版权全部者明白授权,禁止发行本文档及其被实质上改动的版本号.  未经版权全部者事先授权.禁止将此作品及其衍生作品以标准(纸质)书籍形式发行. 假设有兴趣再 ...

  6. HDU 5055 Bob and math problem(结构体)

    主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5055 Problem Description Recently, Bob has been think ...

  7. 内网穿透&UDP打洞

    这两天找度度重新回忆了一下关于内网穿透的事情,在百度文库上找到了两三篇写的比较通俗易懂的文章,把内网穿透做个简单总结. 首先文章建议 Cone NAPT 还有希望,要是 Symmetri NAPT 就 ...

  8. HQL语句大全

    第 15 章 HQL: Hibernate查询语言 Hibernate配备了一种很强大的查询语言,这样的语言看上去很像SQL.可是不要被语法结构 上的类似所迷惑,HQL是很有意识的被设计为全然面向对象 ...

  9. asp.net webform生命周期

  10. 异常处理 Access to the path is denied

    在需要进行读写操作的目录下添加Network Service这个帐号, 由于在iis 6.0中,默认的应用程序池中的标示用的是Network Service, 所以在进程中是使用Network Ser ...