使用Express

作者: BigDipper | 来源:发表于2015-10-15 15:08 被阅读344次

文档结构

使用Express


最简单的启动Express

在工程根目录下新建一个文件:app.js,文件内的代码如下:

var express = require("express"),
    app = express(),
    server;

// 启动服务器

server = app.listen("3000", "127.0.0.1", function () {
    console.log("服务器已启动,监听端口是\033[31m%d\033[0m。 \033[35;1mOh Yeah!\033[0m", server.address().port);
});

然后,用命令提示符窗口,在工程根目录下,启动工程:

node app

在浏览器中输入访问地址127.0.0.1:3000,效果如图所示:

最简单的启动Express.png

添加网站标识图标

下面稍稍加工一下,来为工程添加一个标识图标,就用这个图像吧(图像放在根目录下的public文件夹里):

Oh my god ! They kill Kenny! You bastard!

首先,引入依赖模块:serve-favicon

npm install serve-favicon --save

其次,修改app.js文件:

var express = require("express"),
    favicon = require("serve-favicon"),
    app = express(),
    server;

// 网站标识图标
 
app.use(favicon(__dirname + "/public/kenny.png"));

// 启动服务器

server = app.listen("3000", "127.0.0.1", function () {
    console.log("服务器已启动,监听端口是\033[31m%d\033[0m。 \033[35;1mOh Yeah!\033[0m", server.address().port);
});

在浏览器中输入访问地址127.0.0.1:3000,效果如图所示:

添加网站标识图标.png

润色,向浏览器发送个字符串

这个光秃秃的页面,看着确实难受,总以为页面出错了呢。还是再润色一下,显示点文字吧。

get方法吧,来根据请求路径来处理客户端发出的GET请求。

格式:app.get(path,function(request, response));
path为请求的路径,第二个参数为处理请求的回调函数,有两个参数分别是request和response,代表请求信息和响应信息。

修改app.js文件:

var express = require("express"),
    favicon = require("serve-favicon"),
    app = express(),
    server;

// 网站标识图标
 
app.use(favicon(__dirname + "/public/kenny.png"));

// 处理客户的的GET请求

app.get("/", function(req, res) {
    res.send("首页");
});

app.get("/about", function(req, res) {
    res.send("这是about页面");
});

app.get("*", function(req, res) {
    res.send("还没有页面,显示个404");
});

// 启动服务器

server = app.listen("3000", "127.0.0.1", function () {
    console.log("服务器已启动,监听端口是\033[31m%d\033[0m。 \033[35;1mOh Yeah!\033[0m", server.address().port);
});

这样就指定了about页面路径、根路径和所有路径的处理方法。并且在回调函数内部,使用HTTP回应的send方法,表示向浏览器发送一个字符串。

效果如图所示:

首页.png about页面.png 其他页面.png

来真的了,访问一个页面

接下来,该弄点儿干货了。首页还是简陋,又不能光用字符串拼出个正经的、比较美观的页面,真那样干,非得累死不行。怎么解决呢?有个法儿,用模板呗。先把需要的内容用模板组装好,然后在需要显示的时候调用它,靠,简单利索。

事儿就是这么个事儿,下手吧。

其实,Express本身自己是有模板引擎的,你想啊,这么牛B的框架,连模板引擎都没有,怎么能拿出手给人看呢。它默认的模板是jade,中文的意思是翡翠。怎么样,很高大上吧,不过,这个模板我不会用,它的语法、文档格式什么的,我看着很陌生,所以我选择了另外一种模板,名字叫ejs,这个模板的文档格式跟html非常贴近,它的语法又跟jsp非常贴近,而且据路边八卦社透露,它的性能要比jade高,因此就拿它试刀吧。

使用ejs模板的步骤如下:

  1. 安装ejs模块
    在命令提示符下进行安装,代码如下:
npm install ejs --save
  1. 指定前端模板所在文件夹
app.set("views", __dirname + "/view");
  1. 指定用ejs模板引擎来解析
app.set("view engine", "ejs");
  1. 设置路由
app.get("/", function(req, res) {
    res.render("index");
});

这段代码的意思是说:当访问工程的根路径时,ejs引擎会调用view文件夹下的index.ejs文件,解析后,将结果显示到浏览器中。注意:调用模板要用render()方法,而不是之前介绍的send()方法

index.ejs文件内容如下:

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
    <head>
        <meta charset="UTF-8">
        <title>首页---ejs模板</title>
    </head>
    <body>
        我是ejs模板
    </body>
</html>

app.js文件内容如下:

var express = require("express"),
    favicon = require("serve-favicon"),
    app = express(),
    server;

// 设置前端模板所在文件夹

app.set("views", __dirname + "/view");

// 指定用ejs模板引擎

app.set("view engine", "ejs");

// 网站标识图标
 
app.use(favicon(__dirname + "/public/kenny.png"));

// 处理客户的的GET请求

app.get("/", function(req, res) {
    res.render("index");
});

app.get("/about", function(req, res) {
    res.send("这是about页面");
});

app.get("*", function(req, res) {
    res.send("还没有页面,显示个404");
});

// 启动服务器

server = app.listen("3000", "127.0.0.1", function () {
    console.log("服务器已启动,监听端口是\033[31m%d\033[0m。 \033[35;1mOh Yeah!\033[0m", server.address().port);
});

效果如图所示:

使用ejs模板引擎.png

基因突变,用ejs引擎解析html文件

可以看得出来,上面的解析ejs文件例子中,这个index.ejs文件的文档结构其实就是一个html的文档结构,那么问题来了,ejs引擎能不能解析html文件呢?Of course, no problem!

那么,下手吧。

用ejs解析html文件,只需要两行代码:

app.set("view engine", "html");
app.engine('.html', require('ejs').__express);

这样,修改后的app.js文件的内容就是这样的:

var express = require("express"),
    favicon = require("serve-favicon"),
    app = express(),
    server;

// 设置前端模板所在文件夹

app.set("views", __dirname + "/view");

// 指定用ejs模板引擎,来解析后缀是.html的文件

app.set("view engine", "html");
app.engine('.html', require('ejs').__express);

// 网站标识图标
 
app.use(favicon(__dirname + "/public/kenny.png"));

// 处理客户的的GET请求

app.get("/", function(req, res) {
    res.render("index");
});

app.get("/about", function(req, res) {
    res.send("这是about页面");
});

app.get("*", function(req, res) {
    res.send("还没有页面,显示个404");
});

// 启动服务器

server = app.listen("3000", "127.0.0.1", function () {
    console.log("服务器已启动,监听端口是\033[31m%d\033[0m。 \033[35;1mOh Yeah!\033[0m", server.address().port);
});

这段代码的意思是说:当访问工程的根路径时,ejs引擎会调用view文件夹下的index.html文件,解析后,将结果显示到浏览器中。

index.html文件内容如下:

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
    <meta charset="UTF-8">
    <title>首页-HTML模板</title>
</head>
<body>
    我是HTML模板
</body>
</html>

效果如图所示:

用ejs引擎解析html文件.png

然后...该定义静态资源的目录了

众所周知,一个页面中只用HTML标签来展示是远远不够的,它还应当具有丰富的配色(让用户看起来顺眼,舒服)和逻辑交互(与用户互动,完成某些操作),这就需要用到CSS样式文件、各种图像文件、JS脚本文件等等各种类型的静态资源。那么,问题又来了,怎样让Express能够访问到这些静态资源呢?其实不难,只需要在app.js文件中指定存放静态资源的目录就行了。

在app.js文件中添加如下代码:

var path = require('path');

// 定义静态文件目录

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

这样,Express就能够访问到根目录下public文件夹中的静态资源了。

index.html文件内容如下:

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
    <meta charset="UTF-8">
    <title>首页-HTML模板</title>
    <link href="/css/demo.css" rel="stylesheet" type="text/css" />
</head>
<body>
    我是HTML模板
</body>
</html>

这样public/css文件夹下的demo.css就可以被页面加载、解析了。


别忘了,要设置路由

...

相关文章

网友评论

本文标题:使用Express

本文链接:https://www.haomeiwen.com/subject/gfgncttx.html