一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。
今天介绍一下最近常用的web框架:Fastify,以及我最近的一个小想法
什么是fastify
从官网的介绍上来看,www.fastify.cn/ 。
fastify是一个 web 开发框架,其设计灵感来自 Hapi 和 Express,致力于以最少的开销和强大的插件结构提供最佳的开发体验。据我们所知,它是这个领域里速度最快的 web 框架之一。
基本使用
从API上来看,fastify和express是基本差不多的. 先安装
npm install fastify
启动一个简单的服务
//index.js
const fastify = require('fastify')({ logger: true })
//声明一个最简单的路由
fastify.get('/', async (request, reply) => {
return { hello: 'world' }
})
//启动服务
setImmediate(async () => {
try {
await fastify.listen(process.env.PORT||3000,'0.0.0.0')
} catch (err) {
fastify.log.error(err)
process.exit(1)
}
})
这样就在本地端口3000上启动了一个简单的服务。打眼望去,整个框架完全支持async/await,写法上基本与express相同,但是减少了很多配置,例如不用配置body的解析,fastify将根据返回值自动处理。
使用插件
插件的使用也和express也差不多,而且基本上express常用的插件也有对应的fastify版本
fastify.register(
require('fastify-cors'),
{
optionsSuccessStatus:204
}
)
配置式API
fastify 还支持配置式API,例如
fastify.route({
method:'GET',
url:'/123'
async handler(req,reply){
return "who's your daddy"
}
})
一个简单的代理服务
本地开发的时候,经常需要对接本地或者三方的接口,很容易碰见跨域问题,这时候你就需要一个代理服务,当然你可以通过配置webpack实现,但是使用fastify会有一种更简单的方法
const fastify = require('fastify')({
logger: true
})
const to = require('await-to-js').default
const request = require("request-promise");
const baseUrl = 'http://192.168.0.199:8080'
fastify.register(
require('fastify-helmet'),
// Example disables the `contentSecurityPolicy` middleware but keeps the rest.
{ contentSecurityPolicy: false }
)
fastify.register(
require('fastify-cors'),
{
optionsSuccessStatus:204
}
)
fastify.get('/', async (request, reply) => {
return 'hello world'
})
fastify.route({
method: ['GET','POST','PUT','DELETE'],
url: '*',
handler: async (req, reply) => {
const options = {
method: req.method,
uri: baseUrl + req.url,
json: true
}
if(req.query){
options.qs = req.query
}
if(['POST','PUT'].includes(req.method)){
options.body = req.body
}
return await request(options)
}
})
setImmediate(async () => {
try {
await fastify.listen(process.env.PORT||3000,'0.0.0.0')
} catch (err) {
fastify.log.error(err)
process.exit(1)
}
})
那么大家又选择了什么web开发框架呢?欢迎评论区讨论留言