上周虽然提到了ejs
但我想从 Web Development with Node Express O'Reilly 的这本书重新做express的专案
这本书会逐步完成一个旅行社的网站
第七个应用:开发旅行社网站(1)
首先先建立一个 project
资料夹,
并在底下建立 meadowlark
资料夹 (这个名称是旅行社的名字,取自一种鸟类)
进入到该资料夹
$ cd <path>/project/meadowlark
建立管理所有用到套件的文件,这段指令会建立package.jsonnpm init
安装 express到这个专案,会将express相关的程式码安装到 node_modules
资料夹npm install --save express
在管理时,由于 node_modules
里存放的程式码都能用npm重新生成,因此不希望存放下来,所以要新增一个文件
.gitignore
避免浪费空间# ignore packages installed by npmnode_modules# put any other files you don't want to check in here,# such as .DS_Store (OSX), *.bak, etc.
新增 meadowlark.js
var express = require('express');var app = express();app.set('port', process.env.PORT || 3000);//404页面app.use(function(req, res){res.type('text/plain');res.status(404);res.send('404 - Not Found');});//505页面app.use(function(err, req, res, next){console.error(err.stack);res.type('text/plain');res.status(500);res.send('500 - Server Error');});app.listen(app.get('port'), function(){console.log( 'Express started on http://localhost:' +app.get('port'));});
这样就会建立一个express的server,但因为还没有设定路由,所以会出现404的画面
var express = require('express');var app = express();app.set('port',process.env.PORT || 3000);//Home pageapp.get('/',function(req,res){res.type('text/plain');res.send('Meadowlark Travel');});//About Pageapp.get('/about',function(req,res){res.type('text/plain');res.send('About Meadowlark Travel');})//製作404画面app.use(function(req,res){res.type('text/plain');res.status(404);res.send('404 - Not Found');});//505画面app.use(function(err,req,res,next){console.log(err.stack);res.type('text/plain');res.status(500);res.send('500 - Server Error');});app.listen(app.get('port'), function(){console.log('Express start on http://localhost:' + app.get('port'));});
app.get
是用来写路由的方法
app.verb
在Express当中这里的verb是用来表示HTTP的动作,例如get
/post
app.get
本身会忽略大小写、反斜线、也不考虑查询的字串,
因此 /About
、 /ABOUT
、 /about/
、 /about?=foo
、 /about/?=foo
都不影响结果
res.type
也是express提供的方式,能够设定Content Type
在製作404和500画面时则是用到 app.use
这是一种middleware的处理方式