Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nodejs做接口开发架构经验总结 #29

Open
ChenJiaH opened this issue Aug 2, 2019 · 0 comments
Open

Nodejs做接口开发架构经验总结 #29

ChenJiaH opened this issue Aug 2, 2019 · 0 comments
Labels

Comments

@ChenJiaH
Copy link
Owner

ChenJiaH commented Aug 2, 2019

首发于微信公众号《前端成长记》,写于 2018.09.05

  1. API设计风格

如果是以操作为主,选择 RPC,风格类似 /getUsers;如果是以资源指向为主,选择 Restful ,风格类似 /users。

  1. API版本设计

请务必带上版本进行设计,否则改动将造成不可预计的后果。

  1. 全局拦截器

比如我分成 stable 和 v1 和 v2 三个版本的接口, stable 是稳定对外输出接口,v1 和 v2 对应不同版本的业务接口。

假设业务接口需要增加登录拦截,那么在 express 中使用的话,像这样就可以:

let app = express()
// 全局控制,看需求也可以拆分成 /v1 和 /v2,进行针对性处理
app.use('/', (req, res, next) => {
    if (/^\/api\/stable\//g.test(req.url)) {    // stable api ,不需要登录拦截
        next()
    } else {
        // 校验登陆
        if (isLogin) {
            next()
        } else {
            // 未登录处理逻辑
            toLogin()
        }
    }
})
  1. 全局拦截后,需要保留登录状态

可以将登录信息写入 req。

如果使用了 multer 处理 fromData 类型上传,千万不要将信息写在 req.body 中,因为 multer 会处理 req ,非 req 自身 body 字段将被过滤。比如 req.body._userInfo = {name: 'McChen'} ,使用 multer 发现 req.body = {}.

  1. 处理 FormData 上传

使用 multer 中间件,可以自定义过滤,自定义存储等。

  1. 文件上传接口处理响应方式

分为两种情况:

  • 数据库数据插入成功就返回成功响应,后台继续进行上传操作,但有可能上传失败。优势是响应时间短,无法保证100%上传成功。
  • 全部上传完成后才返回成功响应。优势是可以保证100%上传成功,但是响应时间会很慢,尤其是多个大文件上传时。PC网线直连测试1.7M单文件耗时约2秒。

目前采用以成功率为唯一保障,多文件并行上传的方式。

  1. sort导致查询速度明显减慢

根据sort条件建立合理的索引值 ensureIndex

  1. aggrate聚合查询慢

目前没找到合适的解决方案,只在match和sort做了优化,该lookup的还得lookup

(完)


本文为原创文章,可能会更新知识点及修正错误,因此转载请保留原出处,方便溯源,避免陈旧错误知识的误导,同时有更好的阅读体验
如果能给您带去些许帮助,欢迎 ⭐️star 或 ✏️ fork
(转载请注明出处:https://chenjiahao.xyz)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant