Express详细配置说明

本文介绍Express.js的基础配置方法,包括视图路径与模板设置、中间件配置、错误处理及请求处理等内容,帮助初学者快速掌握Express.js的核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

express.js继承自connect模块,所以如果你的node_modules文件夹下没有connect模块也是不行的。


设置views路径和模板

我们再来看下面两行:

app.set('views', __dirname + '/views'); app.set('viewengine', 'jade');


上面两行是设置views文件夹,即模板文件夹,__dirname是node.js里面的全局变量,即取得执行的js所在的路径,另外__filename是目前执行的js文件名。所以,app.set(‘views’, __dirname + ‘/views’);是设置views的文件夹。

而app.set('view engine', 'jade');是设置express.js所使用的renderengine。除了Jade之外,express.js还支持EJS(embedded javascript)、Haml、CoffeScript和jQuerytemplate等js模板。

app.use配置

app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router);app.use(express.static(__dirname + '/public'));

express.bodyParser()是Connect內建的middleware,设置此处可以将client提交过来的post请求放入request.body中。
express.methodOverride()也是Connect內建的,可以协助处理POST请求伪装PUT、DELETE和其他HTTP methods。
app.router()是route requests,但express.js的官方文件是这句可有可无,并且经过测试还真的是这样,不过还是写上吧。
express.static()也是一个Connect內建的middleware来处理静态的requests,例如css、js、img文件等。所以static()里面指定的文件夹中的文件会直接作为静态资源吐出来。

app.configure设置

app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack:true })); }); app.configure('production', function(){ app.use(express.errorHandler()); });

express.errorHandler()是Connect內建的middleware来協助處理例外。這裡也揭露了app.configure()的令一个用法,第一个參數是node.js的環境設定,如此我們就可以設定在不同的執行環境使用不同程度的dump。PS:node.js是透過NODE_ENV這个環境變數来取得環境設定,e.g.:在命令列,NODE_ENV=production node app.js就可以進入production環境。

路由和request的处理

ok,下面是nodejs处理request的内容:

app.get('/', function(req, res){ res.render('index', { title: 'Express' }); });

上面的代码意思是,get请求根目录则调用views文件夹中的index模板,并且传入参数title为“Express”,这个title就可以在模板文件中直接使用。

在express中要处理post请求,需要使用app.post()。如下面的代码:

app.post('/add', function(req,res){ res.render('add', { sum: req.body.a + req.body.b }); });

前面我们提到了req.body是express.bodyParser()把POST参数处理后的结果。

另外除了get和post方法,还有app.all()意思就是所有的请求处理。

添加listen,启动nodejs服务器

app.listen(3000); console.log( "Expressserver listening on port %d in %s mode", app.address().port,app.settings.env);

到目前为止,我们就基本全明白了express配置了,也就不会像以前那样跟别人都写个hello world却不知道各行代码的含义了。

### 如何在 Express.js 中设置和使用 Axios 进行 HTTP 请求 #### 安装依赖库 为了能够在 Express.js 项目中使用 Axios 发起 HTTP 请求,首先需要安装 Axios 和其他必要的包。可以通过 npm 或 yarn 来完成这一操作。 ```bash npm install axios express body-parser --save ``` 这段命令会下载并安装 `axios`、`express` 和 `body-parser` 到当前项目的 node_modules 文件夹下[^1]。 #### 配置中间件解析请求体 为了让服务器端能够正确处理来自客户端的 POST 请求数据,在 Express 应用程序里应该引入 `body-parser` 并配置它来解析 JSON 格式的请求体以及 URL 编码形式的数据: ```javascript const express = require('express'); const bodyParser = require('body-parser'); // 创建应用实例 const app = express(); // 使用 body-parser 解析 application/json 类型的内容 app.use(bodyParser.json()); // 使用 body-parser 解析 application/x-www-form-urlencoded 类型的内容 app.use(bodyParser.urlencoded({ extended: true })); ``` 上述代码片段展示了如何利用 `body-parser` 设置两个不同的解析器,分别针对不同类型的请求负载进行适配[^2]。 #### 实现路由处理器函数中的 Axios 调用 当接收到特定路径下的请求时,可以在对应的路由处理器内部调用 Axios 向第三方服务发起新的 HTTP 请求。下面是一个简单的例子说明怎样在一个 GET 方法定义内执行这样的逻辑: ```javascript const axios = require('axios'); // 假设这是一个获取天气预报信息的服务接口 app.get('/api/weather', async (req, res) => { try { const response = await axios({ method: 'get', url: 'https://example.com/api/v1/forecast?city=Beijing' }); // 将响应结果转发给前端 res.status(200).json(response.data); } catch (err) { console.error(err.message); res.status(500).send('Internal Server Error'); } }); ``` 此部分展示了一个异步函数作为 `/api/weather` 路由上的 GET 请求处理器,其中包含了对另一个 API 的调用来取得北京的天气情况,并把得到的结果返回给原始请求者。 #### 处理 POST 请求的例子 对于像登录验证这样涉及提交表单或其他结构化数据的情况,则可能更常遇到 POST 请求。这里给出一个关于如何接收并通过 Axios 继续传递这些数据到另一系统的示范: ```javascript app.post('/login', async (req, res) => { let { username, password } = req.body; try { const result = await axios({ method: 'post', url: 'http://localhost:8000/authenticate', data: { username, password }, headers: { 'Content-Type': 'application/json' } }); // 成功后保存 token 或做进一步的操作 res.cookie('auth_token', result.data.token); // 返回成功消息给客户端 res.send({ message: 'Login successful!' }); } catch (error) { // 如果认证失败则告知用户 res.status(401).send({ error: 'Invalid credentials.' }); } }); ``` 在这个案例中,假设有一个外部的身份验证服务位于 `http://localhost:8000/authenticate` 上,该服务接受用户名和密码来进行身份确认。一旦通过了这一步骤,就会生成一个新的访问令牌(token),随后将其存储于用户的 cookie 中以便后续使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值