用node作中间层--起步篇(项目结构及搭建服务器)

前言:这是我第一次用node作项目,该项目进行得算是比较顺利,前后端分工明确,前端责任范围更广,包括与后端交换数据,和模板渲染,后端负责提供接口。之前基于node的了解主要来自官方文档和网上流传的若干电子著作。由于经验有限,十分欢迎大家给出建设性意见。

本集将采用连载形式,基本顺序同我做项目的顺序,先解决功能需求,后期优化性能。

项目所用到的技术:

采用node中非常好用的express框架搭建。

渲染模板,采用了语法好理解,功能强大,没有箭头符的express-handlebars。

采用request与后端互换数据。

介绍项目结构:

包含存储渲染模板所用帮助器的存储位置,位于lib中helper.js。

包含向浏览器暴露的公共文件img\css\js, 存储在public下。

包含请求页面路径及处理函数,在routes下。

包含视图文件,布局和部分模块及页面视图,采用了express-handlebar模板,储存在views下。

包含app.js,项目的入口,存放了中间件的处理、转发请求、全局变量、启动服务器等。这里也是本篇主要讲解的地方。

包含package.json配置文件,记录了项目所需要的全部依赖。

包含proxy.js ,在这里手动写了一个接口转发的逻辑。

项目结构如下:

-lib

-helper.js

-public

+css

+img

+js

-routes

-index.js

-views

-layouts

-main.hbs

...

-partials

-header.hbs

...

index.hbs

-app.js

-package.json

-proxy.js

创建项目

假设你已安装了express, 找到项目存放的目标文件夹,在其下方新建项目名称,并进入到项目初始化。

按顺序使用命名如下:

创建项目mkdir myProject

进入项目中cd myProject

初始化项目npm init,根据提醒填写相应信息

具体流程可参考:http://expressjs.com/en/starter/installing.html

安装依赖

使用命令 npm install 包名 —save-dev/-save 注意后缀表示存储到 package.json中,以便他人可以使用npm install 直接下载安装。命令—save 会将其安装在dependencies中,--save-dev 则会安装在devDependencies, 在两种属性名下的包均可以通过npm install 安装,不同点在于devDependencies表示开发中所用到的包,dependencies表示生产环境所用到的包,根据需要存储在不同地方。

启动项目

项目入口逻辑在app.js文件中,先引入项目所需要的全部依赖和用到的其他文件路径,设置视图相关的内容,使用中间件,设置监听端口。

代码如下:

var express =  require (‘express’)

var favicon = require(‘serve-favicon’)//网站地址栏中图标

var logger = require(‘morgan’)//日志信息

var bodyParser = require('body-parser’);//解析

var exphbs = require('express-handlebars’);//模板

var request = require('request’);//与后端互换数据

var index = require('./routes/index’);//请求处理分支

var proxy = require("./proxy").proxy;//转发

var helpers = require('./lib/helpers’);//模板渲染中用到的帮助器

var app = express();//启动express

//设置视图位置

app.set('views', path.join(__dirname, 'views'));

//设置模板

var hbs = exphbs.create({

defaultLayout: 'main',

extname: "hbs",

helpers: helpers,

partialsDir: [

'main',

'views/partials/',

]

});

app.set('view engine', 'hbs');

app.engine('hbs', hbs.engine);

//设置监听端口

app.set('port', process.env.PORT || 8000);

//是否缓存

app.set('view cache', false);

//添加中间件

app.use(favicon(__dirname + '/public/img/favicon.ico'));

app.use(express.static(path.join(__dirname, 'public')));

app.use(logger('dev'));

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({

extended: false

}));

//引入转发文件

app.use(function(req, res, next) {

req.proxy = new proxy();

req.proxy.req = req;

next();

});

//全局变量存储信息

app.use(function(req, res, next) {

req.proxy.request({

method: "GET",

url: “...",

qs: req.query

},function(err, response, body) {

var data;

try {

data = JSON.parse(body);

} catch(e) {

next(e)

return;

}

if (!res.locals.partials) {

res.locals.partials = {}

}

res.locals.partials.loginstate = data;

next();

});

});

//请求路由

app.use('/', index);

//处理错误

app.use(function(err, req, res, next) {

res.render('error', {

err: err,

url: req.originalUrl

});

})

//监听端口

app.listen(app.get('port'), function () {

console.log('express-handlebars example server listening on:' + app.get('port'));

});

在浏览器中输入localhost:8000即可打开端口。

下一节将介绍转发逻辑。

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

推荐阅读更多精彩内容