标签:
本服务器采用了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
结束!!!
标签:
原文地址:http://www.cnblogs.com/hehong/p/5965759.html