本服务器采用了node-koa(2.0):koa是Express下的一个web框架。

搭建步骤:

1.首先我们创建一个web-koa目录,在目录下创建app.js,package.json,start.js三个文件。

2.然后我们来编辑最基本的package.json文件,如下:

$ npm init
{
  "name": "myapp",
  "version": "1.0.0",
  "description": "this is my test web app in nodejs ",
  "main": "app.js",
  "scripts": {
"start": "node start.js"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/hehongfe/weapp-node-koa.git"
  },
  "keywords": [
    "koa"
  ],
  "author": "*****",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/hehongfe/weapp-node-koa/issues"
  },
  "homepage": "https://github.com/hehongfe/weapp-node-koa#readme","dependencies":{
 
}
}

其中的dependencies是我们做需要加载的模块信息,本项目需要用到的模块有如  koa2.0.0 

模块安装有两种方式:命令行 npm install (模块名)或者 在dependencies中配置,如下

"dependencies": {
        "babel-core": "6.13.2",//用ES7编写的JavaScript代码,用Babel转换成ES6以后,就可以在Node环境下执行
        "babel-polyfill": "6.13.0",
        "babel-preset-es2015-node6": "0.3.0",
        "babel-preset-stage-3": "6.5.0",//为了让async语法能正常执行,我们只需要指定ES7的stage-3规则。
        "koa": "2.0.0",//web主模块
        "koa-router": "7.0.0",//它负责处理URL映射
        "koa-bodyparser": "3.2.0"//无论是Node.js提供的原始request对象,还是koa提供的request对象,都不提供解析request的body的功能!,引入它来解析原始request请求
    }

注意:json中不能有注释。

2.然后我们在根目录中打开控制台(app.js目录),输入npm install ,然后我们就可以看到一个node_modules模块文件夹。

3.接下来编写start.js,如下:

var register=require('babel-core/register');
register({
      presets:['stage-3']
});
require('./app.js');

接着我们建立一个专门处理url的文件夹-controller:

controller目下建立 index.js和hello.js

index.js:

function login=async (ctx,next) =>{
    console.log("method:  "+ctx.request.method+"  url :"+ctx.request.url);
    ctx.response.body=`
              <h1> welcome to you!!!</h1>
              <form action="/singin" method="post">
                <p>Name:<input name="name" value="koa"></p>
                <p>Password:<input name="password" ></p>
                <p>Name:<input type="submit" name="Submint" value="Submit"></p>
              </form>`;
}
function singin=async (ctx,next) =>{
    console.log("method:  "+ctx.request.method+"  url :"+ctx.request.url);
    var name=ctx.request.body.name;
    var password=ctx.request.body.password;
        if(name=="hehong"&&password=="123"){
      ctx.response.body=`<h1>  Congratulations on &{name}success. </h1>`;
    }else{
      ctx.response.body=`<h1>  sorry for landing. </h1>
              <a href="/">click me to relogin</a>
              `;
    }
}
 
module.exports={
  'GET /':login,
  'POST /singin':singin
}

 

 

4.在app.js同级目录中建立controller.js文件专门来负责router的文件。

controller.js:
var fs=require('fs');
function addController(router,dir){
  var dirname=__dirname;
  var files=fs.readdirsync(dirname+'/'+dir);//读取文件夹里的内容
  var js_files=files.filter(function(f){
          return f.endsWith('.js');
        },files);
  js_files.map(function(x){
    var mapping=require(dirname+'/'+dir+x);
           addMapping(router,mapping);
  });
}
 
 
function addMapping(router,mapping){
  for(var url in mapping){
    if(url.startsWith('GET ')){
      var path=url.substring(4);
      router.get(path,mapping[url]);
    }else if(url.startsWith('POST ')){ 
      var path=url.substring(5);
      router.poat(path,mapping[url]);
    };
  }
}
module.exports=function(dir){
  var controller_dir=dir||'controller';
      var router=require('koa-router')();
  addController(router,controller_dir);
      return router.routes()
}

 

最后编写 app.js

app.js:
var Koa=require('koa');
var bodyParser=require('koa-bodyparser');
var controller=require('./controller');
var app=new Koa();
app.use(async(ctx,next) =>{
  console.log('method:'+ctx.requet.method+' URL :'+ctx.request.url);
});
app.use(bodyParser());//必须在 router之前
app.use(controller());
app.listen(8001);
console.log('you can listen to 8001, start your webapp work!!'); 
 
node start

结束!!!