抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Node.js

作为网工人怎么能不会搭后端呢?
今天就拿 Node.js 下的 Express 搭一个后端

Node.js 是什么东西

你可能没听说过 Node.js,但是应该听说过 JavaScript,你也应该知道 Chrome(谷歌浏览器) 吧

  • Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境(Runtime,即运行时)。
  • Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。

简介

Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHPPythonPerlRuby 等服务端语言平起平坐的脚本语言。它发布于 2009 年 5 月,由 Ryan Dahl 开发,实质是对 Chrome V8 引擎进行了封装(底层调用 C/C++的相关库)。

Node 对一些特殊用例进行优化,提供替代的 API,使得 V8 在非浏览器环境下运行得更好。V8 引擎执行 Javascript 的速度非常快,性能非常好。常用于用于方便地搭建响应速度快、易于扩展的网络应用。Node 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。

Express.js

这是一个基于 Node.js 平台,快速、开放、极简的 Web 开发框架,为 Web 和移动应用程序提供一组强大的功能。其实就是一个 node 下很完善的一个后端框架,在众多 js 后端框架中 Express 是做到大而全的。

为什么选择 Express

首先是因为node 相比 java 下的 springpython 下的 django 之类开发效率高。node 平台编程语言还是 js,对于前端也很友好,即使想要面向对象也有 ECMA6Typescript 可选;还有完善的包管理工具 npm 或者 yarn;

express 框架非常易于使用,即使没有使用经验也能很快上手。而且其大而全的特性也是功能强大的表现,相关需求的插件很多,使用文档和教程也是不计其数,可以说是各种流行后端框架中最高效最轻量的一个了。

安装

首先假定你已经安装了 Node.js,接下来为你的应用创建一个目录,然后进入此目录并将其作为当前工作目录。

1
2
mkdir myapp
cd myapp

通过 npm init 命令为你的应用创建一个 package.json 文件。 欲了解 package.json 是如何起作用的,请参考 Specifics of npm’s package.json handling.

1
npm init

此命令将要求你输入几个参数,例如此应用的名称和版本。 你可以直接按“回车”键接受大部分默认设置即可,下面这个除外:

1
entry point: (index.js)

键入 app.js 或者你所希望的名称,这是当前应用的入口文件。如果你希望采用默认的 index.js 文件名,只需按“回车”键即可。

接下来在 myapp 目录下安装 Express 并将其保存到依赖列表中。如下:

1
npm install express --save

如果只是临时安装 Express,不想将它添加到依赖列表中,可执行如下命令:

1
npm install express --no-save

npm 5.0+ 版本在默认情况下会将安装的模块添加到 package.json 文件中的 dependencies 列表中。对于较老的 npm 版本,你就必须指定 --save 参数。然后,照旧执行 npm install 命令即可自动安装依赖列表中所列出的所有模块。

示例

最简单的示例

helloworld
1
2
3
4
5
6
7
8
9
10
11
12
var express = require('express')
var app = express()
var port = 8080;

app.get('/', function(req, res) {
res.send('Hello World')
})

var server = app.listen(port, function() {
var host = server.address().address
console.log('应用实例,访问地址为 http://%s:%s', host, port)
})
甚至可以这样写(ES 6)
1
2
3
4
5
6
7
8
9
// ECMAScript 6 支持了 let, const 关键字、类 class、lambda 表达式、字符串模板(`${}`)、异步关键字async, await、解构赋值、模块的导入(import)和导出(export default/export)、Promise (异步的同步代码)、set和map的实现等好多特性,有时间我会更一期文章讲这个
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => res.send('Hello World!'));
// 采用了lambda表达式的写法非常简洁不是吗

app.listen(port, () => console.log(`Example app listening on port ${port}!`));

通过 npm 文件名 就可以启动。

请求和响应

Express 应用使用回调函数的参数: requestresponse 对象来处理请求和响应的数据。

处理 GET 请求示例
1
2
3
4
5
6
7
8
app.get('/', function(req, res) {
// 处理访问'/'目录的回调函数

// 假设用户访问的是 /?name=string 执行结果就是输出 string
console.log('您通过query指定的参数是 %s', req.query.name)
// 返回json响应
res.json(value)
})
处理 POST 请求示例
1
2
3
4
5
app.post('/', (req, res) => {
// 为了省事,函数我用lambda表达式表示了
// 假设用户向 '/' POST 一个 { name: 'string' }
console.log('您提交的name字段值是 %s', req.body.name) // 返回结果就是 string
})

使用命令行生成器

通过应用生成器工具 express-generator 可以快速创建一个应用的基本框架。

1
2
3
4
5
6
7
# 要求 node.js 版本在 8.2.0 及以上
npx express-generator

# 如果低于 8.2.0 可以使用
npm install -g express-generator
# 安装完成后再执行
express

详细信息请看教程

使用路由功能

教程

评论