1.搭建服务框架

搭建服务框架

简介

基于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

特殊说明

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容