美文网首页
1.搭建服务框架

1.搭建服务框架

作者: virl | 来源:发表于2019-02-16 22:01 被阅读0次

    搭建服务框架

    简介

    基于Node.js语言,使用Koa2框架。
    基础的js语法这里就不做介绍,反正也不难,看一下基础教程就行了,如果有编程基础,直接看代码也可以看懂的。
    基础教程点击这里,廖老哥的入门教程还是很适合入门的。
    node和npm的安装问题,这里就不特殊说明,自己可以去找找解决方案,推荐使用nvm来安装

    关于npm

    npm(node package manager),也就是node包管理工具,上面有很多小伙伴开发的开源组件,你可以使用npm来安装、共享、分发代码。链接在这里,我们服务端程序开发使用的开源代码也都是在这里找到的。

    配置工程

    进入到工程目录后,命令行输入 npm init
    后会依次提示输入关于工程的相关信息:
    name: (kite_server)        项目名称
    version: (1.0.0)           版本号
    description:               描述
    entry point: (index.js)    程序入口
    test command:              测试命令
    git repository:            git地址
    keywords:                  项目关键词
    author:                    作者
    license: (ISC)             开源license
    

    都输入完成后会在当前路径生成 package.json 文件,这个文件就是npm包管理的一个配置文件,后续自己做项目的时候可以这样生成,现在可以直接用我生成好的。

    {
      "name": "kite_server",
      "version": "1.0.0",
      "description": "个人云相册服务器",
      "main": "index.js",
      "scripts": {
        "start": "node app.js"
      },
      "repository": {
        "type": "git",
        "url": "git+https://github.com/nervending/kite_server.git"
      },
      "dependencies": {
        "koa": "2.7.0"
      },
      "author": "nervending",
      "license": "Apache License 2.0",
      "bugs": {
        "url": "https://github.com/nervending/kite_server/issues"
      },
      "homepage": "https://github.com/nervending/kite_server#readme"
    }
    

    这里说明一下对默认生成package.json所做的修改

    "scripts": {
        "start": "node app.js"
    },
    

    这部分是配置脚本,比如里面的start命令表示,在命令行中 运行 npm run start 会执行 node app.js

    "dependencies": {
        "koa": "2.7.0"
    },
    

    这个表示当前工程对其他npm包的依赖,这里暂时就是依赖koa(就是我们用的网络框架),对应的版本是2.7.0,后续这里还会不断增加需要的东东。

    然后在命令行执行

    npm install
    

    这个命令就会按照package.json的配置安装相关依赖,可以看到命令行一顿转圈圈,如果没有出错的话相关的依赖就会被安装到node_modules下。
    这里说一下国内因为某些原因可能访问npm会有那么一点点小不顺利,这时候也可以使用cnpm,这个是淘宝做的npm镜像,访问速度快很多,有需要的点击这里,用法差不多。

    run起来dongcidaci

    还记得package.json里面添加的这一段么?

    "scripts": {
        "start": "node app.js"
    },
    

    现在就来实现app.js,工程目录下创建文件,输入内容(这就是koa的示例代码,稍后开始自己改)

    const Koa = require('koa');
    const app = new Koa();
    
    // response
    app.use(async (ctx, next) => {
        await next();
        ctx.body = 'Hello World';
    });
    
    app.listen(3000);
    

    duang,现在就可以试试运行起来了,在命令行执行

    npm start
    

    然后在浏览器中访问 http://localhost:3000/ 就可以看到页面中显示

    Hello World
    

    这就是koa版Hello World,就是这么简单,我们的服务跑起来了。

    简单说一下 app.use 每一次调用就是插入一个对请求处理的函数,通过调用await next();于是就可以实现逐层依次调用然后再依次返回出来的效果。有点抽象,看一个代码就知道了

    const Koa = require('koa');
    const app = new Koa();
    
    // response
    app.use(async (ctx, next) => {
        console.log('f1 enter')
        await next();
        console.log('f1 out')
        // ctx.body = 'Hello World';
    });
    
    app.use(async (ctx, next) => {
        console.log('f2 enter')
        await next();
        console.log('f2 out')
        ctx.body = 'Hello World';
    });
    app.listen(3000);
    

    如果修改app.js这样的话,然后再访问http://localhost:3000/,你就可以在命令行中看到这样的输出

    npm run start
    
    > kite_server@1.0.0 start /Users/virl/wksp/kite/kite_server
    > node app.js
    
    f1 enter
    f2 enter
    f2 out
    f1 out
    

    现在这个样子懂了吧。

    还需要说明一下,npm中npm start是npm run start的缩写,类似的还有npm test, npm stop等。

    工程化的修改

    这一次我们增加工程的配置文件,这是工程化开发中必须的一部分,比如开发环境、预发布环境、已经正式环境的不同服务器可能使用的都是不同的配置。这时候就要写不一样的配置文件。
    在工程目录下创建configs目录,后续所有的配置文件都写在这个目录下。
    在configs目录下创建index.js文件,用来封装对配置文件的读取

    let env_name = process.env.NODE_ENV || 'development';
    let config = undefined
    try {
        config = require(`./${env_name}`);
    } catch (error) {
        console.log(`\tFBI WARNING\nconfig file of '${env_name}' not found, exit process`)
        process.exit(-1)
    }
    
    config.port = process.env.PORT || config.port   module.exports = config
    

    简单解释一下,process是node的全局变量,通过process.env 可以读取命令行中的参数

    let env_name = process.env.NODE_ENV || 'development';
    

    这一样的意思是如果没有配置NODE_ENV,则使用默认值'development'

    config = require(`./${env}`);
    

    这个的意思就是引用env_name字符串对应的名字的配置文件

    config.port = process.env.PORT || config.port
    

    这一行呢,就是如果在命令行参数指定了PORT字段则优先使用命令行中的,否则使用配置文件中的参数
    现在执行 npm start就会报错,错误信息如下

    virl@virldeMacBook-Pro-2 ~/w/k/kite_server>npm run start
    
    > kite_server@1.0.0 start /Users/virl/wksp/kite/kite_server
    > node app.js
    
            FBI WARNING
    config file of 'development' not found, exit process
    

    这是因为还没有对应的配置文件,在configs目录下创建development.js文件

    module.exports = {
        port: 3000
    }
    

    然后修改app.js中最后两行

    app.listen(Config.port);
    console.log(`server start of:${Config.port}`)
    

    在文件头添加对config的引用
    const Config = require('./configs')

    现在启动

    npm run start
    
    > kite_server@1.0.0 start /Users/virl/wksp/kite/kite_server
    > node app.js
    
    server start of:3000
    

    可以试着执行这个命令看看输出是什么

    env PORT=3301 npm run start
    

    特殊说明

    可以引用,不可转载,谢谢

    相关文章

      网友评论

          本文标题:1.搭建服务框架

          本文链接:https://www.haomeiwen.com/subject/aydbeqtx.html