本服務器采用了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
結束!!!
