koa

构建RESTful API的13种最佳实践

﹥>﹥吖頭↗ 提交于 2020-12-23 19:45:27
翻译:Eolinker 来源: www.eolinker.com Facebook、GitHub、Google以及其他许多巨头都需要一种服务和消费数据的方式。在当今的开发环境中,RESTful API仍然是服务和消费数据的最佳选择之一。 但是你是否考虑过学习行业标准?设计RESTful API的最佳实践是什么?从理论上讲,任何人都可以在不到五分钟的时间内快速启动数据API——无论是Node.js,Golang还是Python。 我们将探讨在构建RESTful API时应考虑的13种最佳实践。 什么是RESTful API? RESTful API需要满足以下约束才能被称为RESTful API。 客户端-服务器模型:RESTful API遵循客户端-服务器模型,其中服务器为数据提供服务,而客户端连接到服务器以使用数据。客户端和服务器之间的交互是通过HTTP(S)请求进行的,该请求传输了请求的数据。 无状态:更重要的是,RESTful API应该是无状态的。每个请求都被视为独立请求。服务器不应跟踪可能影响将来请求结果的任何内部状态。 统一接口:最后,一致性定义了客户端和服务器之间的交互方式。RESTful API定义了命名资源的最佳实践,但定义了允许你修改资源/与之交互的固定HTTP操作。可以在RESTful API中访问以下HTTP操作: • GET请求:检索资源 • POST请求

node.js 工程规范最佳实践

∥☆過路亽.° 提交于 2020-12-23 11:06:34
经过多个项目的实践和思考,总结出当前规范。不强求别人一定要遵守这个规范,首先自己要尽量遵守这个规范。 一. 模块引用规范 类似如下的形式: const fs = require('fs'); const koa = require('koa'); const utils = require('../utils'); const SECONT = 1000; const MINUTE = SECOND * 60; 规则如下: 1. 模块顺序按照 内置模块、第三方模块、自身文件模块 的顺序引用,并且每个块之间要用空行分开; 2. 模块引用要用 const 定义; 3. 有关联关系的变量要定义在一个块里。 二、模块导出规范 位置需要紧邻在顶部的所有常量定义之下,与最下面的常量之间有一行空格。 模块导出对象时,导出语句需如下格式: const A = 100; exports = module.exports = { module1, module2 }; 除此之外,无特殊情况,不可再有其它地方有导出属性的声明。 特殊情况说明:有时候可能需要在运行时动态导出属性,这时可以在其它地方声明。但是最好避免动态导出。 模块导出函数时,不可使用匿名函数,必须有命名,如下所示: exports = module.exports = function util() { // func body }; 三

vue-router history模式下,子路由以及刷新页面not found问题解决

╄→尐↘猪︶ㄣ 提交于 2020-12-10 05:47:48
之前一直用的都是hash模式,最近的项目是导师写好的前端,我来搞后端,因为她弄的是history模式,本地调试没问题,打包后启动服务器就会遇到子页面刷新后not found,以及多级路由也not found的情况。 因为vue的路由是在浏览器中进行管理,如果刷新 http://localhost:3011/ 时可以访问到的,因为请求/路径,node将其指向了index.html(因为webpack打包会把index.html打包到根目录,而koa-webpack在没有传递参数的情况下也是指向的webpack配置文件中output中的publicPath,配置文件中配置的是/,所以默认/请求指向index.html),以下是koa-webpack中默认配置的源代码 ![Paste_Image.png](http: // upload-images.jianshu.io/upload_images/1210894-bb4f6395ba003114.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240z 而/example1请求到node,node会去寻找node端的路由处理,因为node端没有配置这个路由,所有找不到。 如果想要访问到/example1,需要请求到index.html,然后由vue的路由处理找到对应的模块 查了一圈

了不起的 Deno 实战教程

只愿长相守 提交于 2020-12-03 11:50:45
创建了一个 “重学TypeScript” 的微信群,想加群的小伙伴,加我微信 "semlinker" ,备注重学TS。 已出 TypeScript 系列教程 33 篇,欢迎感兴趣的小伙伴来阅读与交流。 对 Deno 还不了解的读者,建议先阅读本人 “了不起的 Deno 入门教程” 这篇文章。 了不起的 Deno 入门教程 一、Oak 简介 相信接触过 Node.js 的读者对 Express、Hapi、Koa 这些 Web 应用开发框架都不会陌生,在 Deno 平台中如果你也想做 Web 应用开发,可以考虑直接使用以下现成的框架: deno-drash:A REST microframework for Deno with zero dependencies。 deno-express:Node Express way for Deno。 oak:A middleware framework for Deno's net server 🦕 。 pogo:Server framework for Deno。 servest:🌾A progressive http server for Deno🌾。 写作本文时,目前 Star 数最高的项目是 Oak,加上我的一个 Star,刚好 720。下面我们来简单介绍一下 Oak: A middleware framework for Deno

我在阿里是如何升到 P8 的

允我心安 提交于 2020-11-28 04:11:43
本文是第十四届 - 前端早早聊成长晋升专场,也是早早聊第 102 场,来自 蚂蚁金服 - 死马 的分享 一、自我介绍 我是不四,毕业后一直在阿里和蚂蚁工作,不四是我在阿里的花名,社区中一般以另一个花名 “死马” 出现。工作这 8 年多来一直专注在 Node.js 和 Web 开发领域,也在社区参与了一些开源项目,包括 Koa、Egg 和 cnpm 等,非常幸运在 node 出生之初就开始参与其中,算是赶上了一波由 node 带来的大前端变革浪潮。每一个人的成长轨迹都不一样,一路上遇到的机遇也各不相同,这次分享也仅站在一个普通工程师的角度来分享我的成长经历和贯穿其中的一些个人习惯。 二、成长历程 实习 在 2011 年的夏天,大三暑假我来到了当时的淘宝数据平台实习。也不知道是运气好还是运气差,我是以 C++ 工程师的身份被招聘的,分配到的数据产品部却是一个做 Web 产品的团队,还是用刚刚出生的 Node.js 作为服务端开发语言,并在实践全栈研发,还记得那时候 node 的版本才 0.4,而我是一个连 JS 和 JSP 都分不清楚的菜鸟,大学三年只写过黑框框的 C++,连 HTTP 是什么都不知道,无比忐忑的开始闷头学习 JS 基础。 多年以后和当时看的入门教材作者成为了同事 幸运的是,当时的团队大牛云集,国内第一批 Node.js 的布道者,node party 的发起人空无

Node.js

泪湿孤枕 提交于 2020-11-20 07:28:50
1.Node来历 2009年,正是推出基于Javascript语言和V8引擎的开源Web服务项目,命名为Node.js,Node.js是第一次把Javascript带到后端开发。全很很多开发人员都熟悉Javascript,所以Node.js一下子就火了。 Javascript语言本身是完善的函数式语言,在前端开发时,开发人员往往写的比较随意,让人感觉javascript就是个”玩具语言”。但Node环境下,通过模块化Javascript代码,加上函数式编程,并且无需考虑浏览器兼容问题,直接使用最新的ES6标准,可以完全满足工程上的需求。 2.Web开发常用框架 a.http框架 1).Express:是第一代最流行的Web框架,它对node.js的http进行封装,用起来如下: var express = require('express' ); var app = express(); app.get( '/', function (req, res) { res.send( 'Hello World!' ); }); app.listen( 3000, function () { console.log( 'Example app listening on port 3000!' ); }); 它基于ES5的语法,要异步实现代码,只有一个方法:回调。如果异步嵌套层次过多

koa2实现简易的webpack-dev-server

巧了我就是萌 提交于 2020-11-19 05:41:44
koa2实现简易的webpack-dev-server热更新 原文 https://github.com/zhuangZhou/Blog/issues/3 闲来无事,用koa2撸了一个简易的webpack-dev-server;其实网上很多express搭建的热更新,但是koa2很少;欢迎大佬拍砖和赐教; 源码 配置基本的webpack 1、下载安装包 webpack webpack-cli html-webpack-plugin css-loader style-loader 由于这里用的是最新的webpack版本,所以需要安装webpack-cli。 2、创建并配置webpack.config.js 这里就不具体配置了,如需要详细配置教程, 请上这里 ; 基础配置完成后,在plugins里配置HotModuleReplacementPlugin插件用于热更新;由于HotModuleReplacementPlugin是webpack内置的插件,所以不需要安装,直接引用就行 const webpack = require('webpack'); plugins:[ new webpack.HotModuleReplacementPlugin() ] 实现webpack-dev-middleware的koa2中间件 webpack-dev-middleware是实现webpack

vue全家桶+Koa2开发笔记(1)--vuex

别等时光非礼了梦想. 提交于 2020-11-14 06:31:39
1. 安装webpack的问题: webpack坑系列--安装webpack-cli 2. vue-cli(vue脚手架)超详细教程 3. 在命令行中使用 touch 执行新建文件; 4. 关于Vue.use()详解 5. vuex 最简单的介绍 目录如左侧所示,主要是标红的三个文件。 5.1 store文件,编写vuex的各个功能,包括: import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const state = { // 定义状态数据 count: 2 } const mutations = { // 定义方法,操作数据 increment (state) { state.count ++ }, decrement (state) { state.count -- } } const actions = { add: ({commit}) => { // 触发上述的方法,对外提供的方法接口,可以在这里提供异步操作 commit('increment' ) }, reduce: ({commit}) => { commit( 'decrement' ) } } export default new Vuex.Store({state, mutations, actions}) 5.2 然后在main文件中

Node.js 蚕食计划(七)—— MongoDB + GraphQL + Vue 初体验

让人想犯罪 __ 提交于 2020-10-22 17:56:05
首先需要搭建一个简单的应用 前端部分不多赘述,如果确实没接触过 Vue 项目,可以参考我的 《Vue 爬坑之路》 系列 后端服务可以参考之前的文章 《Node.js 蚕食计划(六)—— MongoDB + Koa 入门》 完整的项目地址: https://github.com/wisewrong/Test-GraphQL-App ,结合项目食用本文更香哦~ 一、Mongoose 在上一篇文章 《Node.js 蚕食计划(六)》 里,直接使用了 mongodb 中间件来连接数据库,并尝试着操作数据库 但我们一般不会直接用 MongoDB 的原生函数来操作数据库, Mongoose 就是一套操作 MongoDB 数据库的接口 1. Schema 与 Model Schema 是 Mongoose 的基础,用来定义集合的数据模型,也就是传统意义上的表结构 const mongoose = require( ' mongoose ' ); const Schema = mongoose.Schema; // 影片信息 const MovieSchema = new Schema({ name: String, // 影片名称 years: Number, // 上映年代 director: String, // 导演 category: [String], // 影片类型 comments

字节跳动八进八出,offer到手,发现项目不重要算法才最重要

回眸只為那壹抹淺笑 提交于 2020-10-07 08:56:41
先进行说明一下,本人刚刚大三结束,去年十二月的时候是投递了字节的视频架构的实习,共三轮技术面+一轮hr面,成功拿到offer实习了五个月。 今年秋招提前批是投了抖音架构,共三轮技术面+一轮hr面,已经成功拿到offer。 由于去年实习面经没有发,所以跟着本次提前批面经一共八轮面试一起发了。 面经更多的记录我当时面试的思考和一些相关问题回答的切入点,可能会跟其他面经直接给答案有所不同,其实掌握了切入点再进行扩展就是一份好的回答了~ 实习一面(50min) 面试我的的是一个二十出头的小哥哥,第一次面试我还是比较紧张的,还好小哥哥待人和蔼可亲,针对不会的问题并没有刁难我,反而给我不少提示(给点个赞) 首先是自我介绍,问了下我学习前端的途径和方法啥的,算是暖了个开场吧,然后是具体的问题。 1. ES6新特性说一下? 我首先说的是let、const,学长就直接让我详细说一下这两个。let、const有三个方面可说: 1.1 let、const声明的变量只在其所在的块代码内有效,隐式截取了作用域,有了块级作用域的概念。 1.2 暂时性死区,变量声明提升但在不会被赋值为`undefined`,不能在声明之前使用。 1.3 不允许重复声明。 然后给了两个例子说一下: 2. ES6之前的模块引入方式和区别 ES6之前模块引入主要是CommonJS和AMD两种。