打算用 NodeJS 来撸一个小应用,走起!

简介

Node.js 就是运行在服务端的 JavaScript。

  • 基于 Chrome V8 引擎的 JavaScript 运行环境
  • 事件驱动
  • 非阻塞式 I/O 的模型

安装

macOS:

  1. 官网 下载包安装
  2. brew install node

node -v 查看是否安装成功。

Hello, world

创建一个 hello.js

1
console.log("Hello, world!");

在终端运行:

1
> node hello.js

Restify

Restify 是一个基于 NodeJS 的 REST 应用框架,支持服务器端和客户端。Restify 比起 Express 更专注于 REST 服务。

安装

1
sudo npm install restify

创建服务

创建 app.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var restify = require('restify');

// 定义响应方法
function respond(req, res, next) {
res.send('hello' + req.params.name);
}

// 创建服务
var server = restify.createServer();
server.get('/hello/:name', respond);
server.head('/hello/:name', respond);

// 监听 3900 接口
server.listen(3900, function(){
console.log('%s listening at %s', server.name, server.url);
});

运行应用

1
2
▶ node app.js
restify listening at http://[::]:3900

访问接口

1
2
▶ curl 127.0.0.1:3900/hello/world
"hello world"

jwt

Github:jsonwebtoken

踩坑

sign 方法报错:

1
Error: Expected "payload" to be a plain object.

原因:直接将 mongoDB 查询结果对象 mongoosejs Object 作为参数传递,mongoosejs Object 并非序列化参数,需要使用 toJSON() 进行转换。

1
2
3
4
5
6
7
8
// 生成 token 并设置用户 token 缓存
function setToken(user) {
// token 生成
var accessToken = jwt.sign(user.toJSON(), config.secret, {
expiresIn: 1200
});
return accessToken;
}

参考资料