Node js 框架 express 使用

Express 框架的基本使用

express 4.x 文档: http://www.expressjs.com.cn/4x/api.html#express

安装

npm install express --save

基本使用

// 引入模块并实例化对象
const app  = require("express")();

// 监听端口
app.listen(3000);

app.get("/", (request, response) => {
    response.end("hello world");    
});

托管静态文件

在设置好后静态文件托管目录后, 访问指定的目录, 就会自动读取并且返回

js

// 引入模块
const express = require("express");
const app  = express();

// 设置静态文件托管目录

// 第一种方式设置, 不加路由, 按路径访问
app.use(express.static(__dirname + "/public"));

// 第二种方式设置, 使用路由, 必须按路由访问
app.use(express.);

模板中 (index.css 位于 /public 目录下)

<!-- 1.不加路由的访问方式,按照路径 -->
<link rel="stylesheet" href="/index.css">

<!-- 2.使用的方式, 按照路由 -->
<link rel="stylesheet" href="/public/index.css">

路由 (请求)

  • GET 请求
const app  = require("express")();

// app.get("请求路径", (req, res)=>{ ... });
app.get("/get", (request, response) => {
    response.end("hello world");
});
  • POST 请求
const app  = require("express")();

// app.get("请求路径", (req, res)=>{ ... });
app.post("/post", (request, response) => {
    response.end("hello world");
});
  • 路由参数 路由参数,主要是针对 get 请求, post请求可以使用 formidable 这个包

js 中设置和获取路由参数

// 设置模板引擎
app.set('views', './view');
app.engine('.html', ejs.__express);


app.get("/", (request, response) => {
    response.render("test.html");
});

// 设置参数 /:id
app.get("/test/:id/:name", (request, response) => {
    // 对象方式,获取参数 id
    let id = request.params.id;
    // 数组方式, 获取参数
    let name = request.params["name"];

    response.send(name+id);
});

在模板中使用

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>ejs</title>
</head>
<body>
    <p> <a href="/test/alex/1">参数</a>   </p>
    <!-- <p> <a href="/test?id=1">第一种方式</a> </p> -->
</body>
</html>

响应

  • 发送字符串/json
// 引入模块
const ejs = require("ejs");
const express = require("express");
const app = express();

// 监听端口
app.listen(3000);

// 发送字符串
app.get("/str", (request, response) => {
    // 发送json
    response.send({ name: 'alex', age: 20 });
});


// 发送json
app.get("/json", (request, response) => {
    response.send({ name: 'alex', age: 20 });
});
  • 设置状态码
// 引入模块
const ejs = require("ejs");
const express = require("express");
const app = express();

// 监听端口
app.listen(3000);

app.get("/", (request, response) => {
    response.status(404).send("Not Found");
});
  • 多次响应
// 引入模块
const ejs = require("ejs");
const express = require("express");
const app = express();

// 监听端口
app.listen(3000);

app.get("/", (request, response) => {
    response.write("test");
    response.write("test");
    response.write("test");
    response.end("test end");
});

应用生成器

通过应用生成器, express可以快速创建一个应用的骨架

  • 安装
npm install express-generator --save
  • 查看帮助
express -h
  • 安装所欲依赖包
npm install
  • 设置模板引擎
express --view=ejs
  • 启动
set DEBUG=your-project-name  &  npm start
  • 生成后的目录结构树
|--bin              运行目录
|--node_modules     依赖包存放目录
|--public           静态资源存放目录
    |--images
    |--javascripts
    |--stylesheets
|--routes           路由文件存放目录
    |--index.js
    |--user.js
|--views            模板文件存放目录
    |--error.ejs
    |--index.ejs
|--app.js           入口文件
|--package.json
|--package-loack.json
  • app.js
let createError = require('http-errors');
let express = require('express');
let path = require('path');
let cookieParser = require('cookie-parser');
let logger = require('morgan');

// 导入路由文件
let indexRouter = require('./routes/index');
let usersRouter = require('./routes/users');

// 创建express对象
let app = express();

// 模板引擎
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// 使用引入的包
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({extended : false}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// 让用户能够访问路由
app.use('/', indexRouter);
app.use('/users', usersRouter);

// 错误页面
app.use(function (req, res, next) {
    next(createError(404));
});

// 错误处理
app.use(function (err, req, res, next) {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};

    // render the error page
    res.status(err.status || 502);
    res.render('error');
});

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