Node填坑教程——简易http服务器
我们这一期做一个简易的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服务器的更多相关文章
- Node填坑教程——前言
Node是什么? Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物 ...
- Node填坑教程——HelloWorld
环境安装(极简): Node需要的环境可以说及其简单,也可以说及其复杂.为什么这么说呢? 如果里只需要运行环境那么到Node官网下载一个包就行了.里面自带npm管理工具,这是包管理工具,以后会频繁的使 ...
- Node填坑教程——整理文件
如果你能把所有代码写进一个文件,并且能很好的管理.协调.多人开发.那么可以跳过这期(请务必带我飞). 我们接着完善上期的代码,给代码分家. node并没有启动入口,更没有固定的项目结构,文件配置.这些 ...
- Node填坑教程——过滤器
所谓“过滤器”,只是一个概念,可以理解是一个路由,也可以理解为一个中间件.原理非常简单,就是利用匹配规则,让其有限匹配在正常的路由前面处理就行了. 比如有如下路由 app.get('/', funct ...
- Node填坑教程——常用库
作为函数式编程来说,流程控制和函数库是必不可少的(应该吧). 下面我们介绍两个常用的库. lodash:完整的api请参阅,https://lodash.com/docs.这里我们只演示几个简单的例子 ...
- ReactNative 从环境和第一个demo说起,填坑教程
一.React-Native MacOS必备环境配置: 1.安装homebrew(这东西可以理解为命令行的app商店) /usr/bin/ruby -e "$(curl -fsSL http ...
- backbone新手填坑教程资源
backbone 入门第二版 http://www.kancloud.cn/kancloud/backbonejs-learning-note/49379 backbone 入门讲解 http://w ...
- Vue3+Typescript+Node.js实现微信端公众号H5支付(JSAPI v3)教程--各种填坑
----微信支付文档,不得不说,挺乱!(吐槽截止) 功能背景 微信公众号中,点击菜单或者扫码,打开公众号中的H5页面,进行支付. 一.技术栈 前端:Vue:3.0.0,typescript:3.9.3 ...
- 即将上线的flume服务器面临的一系列填坑笔记
即将上线的flume服务器面临的一系列填坑笔记 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.flume缺少依赖包导致启动失败! 报错信息如下: 2018-10-17 ...
随机推荐
- Python3.2官方文件翻译-工具列表和十进制浮点计算
8.7 列表工具 许多数据结构需要通过内置列表类型来满足.但,有时候在不同的性能取舍需要选择一个实现. Array模块能提供一个像列表的array对象,它只能存储同类数据而且更加简洁. 接下来样例展示 ...
- HDU 3172 Virtual Friends(并用正确的设置检查)
职务地址:pid=3172">HDU 3172 带权并查集水题.每次合并的时候维护一下权值.注意坑爹的输入. . 代码例如以下: #include <iostream> # ...
- uva 10652 Board Wrapping (计算几何-凸包)
Problem B Board Wrapping Input: standard input Output: standard output Time Limit: 2 seconds The sma ...
- Tsql查询执行顺序
对于T-SQL编程,用得最广泛的,莫过于查询(Querying).要想写出高质量.高性能的查询语句,必须深入地了解逻辑查询处理. 一.逻辑查询处理的各个阶段 (5)SELECT DISTINCT TO ...
- HTML DOCTYPE 重要性
定义和使用方法 <!DOCTYPE> 声明必须是 HTML 文档的第一行.位于 <html> 标签之前. <!DOCTYPE> 声明不是 HTML 标签.它是指示 ...
- 如何利用【百度地图API】进行定位?非GPS定位
原文:如何利用[百度地图API]进行定位?非GPS定位 如果你可以上网,如果你有火狐浏览器,那么恭喜你.你能很容易使用以下代码进行定位! ------------------------------- ...
- oracle删除重复记录,只保留rowid最小的记录
初探oracle删除重复记录,只保留rowid最小的记录 如题,初探oracle删除重复记录,只保留rowid最小的记录(rowid可以反映数据插入到数据库中的顺序) 一.删除重复记录可以使用多种 ...
- jQuery整理您的笔记----jQuery开始
Jquery它是一种高速.简明的JavaScript相框,jQuery设计目标:Write Less,Do More(写更少的代码,做很多其他的事情). 一.Jquery框架优势: 1.轻量级 jQu ...
- IE6下jquery ajax报error的原因
用jquery ajax()方法,在其他浏览都通过,IE7以上都通过,唯独在ie6不行. 我这边的解决方案是:必须保证ajax里面的所有数字为小写,ie6对大小写敏感. 错误: $.ajax({ ur ...
- Android adb端口转发调试助手Packet Sender
相信大家做过安卓开发或者安卓自动化测试开发的都离不开adb这个Android Debug Bridge这个工具,该工具有个很重要的功能就是端口转发.比如你在目标安卓机器端建立了一个服务来处理获取当前界 ...