Node.js Express 框架(2)
1.读取文件并返回给客户端
- res.sendFile(path):读取文件并返回给客户端,适合静态页面
app.get("/",function(req,res){
res.sendFile(path.join(__dirname,"index.html"))
})
- res.render(path,data):读取文件,配合模版引擎可以将数据渲染到文件中并返回给客户端,适合动态页面
//安装ejs模版引擎
npm install ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<!-- 模版文件 -->
<body>
<h3><%= title %></h3>
<p><%= content %></p>
<p><%= author %></p>
</body>
</html>
//创建服务对象
let app = express()
//引入ejs
const ejs = require('ejs')
//声明模版文件的目录
app.set('views', './views')
//声明使用的模版引擎
app.set('view engine', ejs)
//设置路由,监听路径的访问
app.get("/news",function(req,res){
//模拟数据库中的数据
var news = {
title:"我是标题",
content:"我是内容",
author:"我是作者"
}
//读取模版文件并插入数据,返回给客户端
res.render("news.ejs",news)
})
//开启服务,监听80端口
var server = app.listen(8086,function(){
//当前当前监听的端口号
var port = server.address().port
console.log(`Server running at http://127.0.0.1:${port}/`)
})

2.封装路由模块
由来:在实际开发项目中不可能把所有的代码都写入到入口文件中,而是要进行模块化,有利于方便代码管理、项目维护
PS:我们之前注册路由都是通过app这个对象来完成的,按照这个思路,要封装一个路由模块,就必须接收 app这个参数,拿到这个参数后才能进行下面的路由注册操作。但是从安全的角度不建议这样做,因为这个模版可以拿app这个对象做些注册路由以外的事情,所以这个方法行不通。node.js有专门的API用来解决这个问题,既能注册路由,又不会污染全局
express.Router():它既是一个对象也是一个函数,它可以用来注册路由,使用方法和app.get()一致
路由模块代码:
//router.js
const express = require('express');
var router = express.Router();
router.get('/',function(req,res){
})
router.get('/item',function(req,res){
})
router.get('/submit',function(req,res){
})
router.get('/add',function(req,res){
})
router.post('/',function(req,res){
})
module.exports = router;
- 入口文件代码:
//加载express
const express = require('express');
//引入路由模块
const router = require('./router.js');
//1.创建服务对象
var app = express();
//每次访问都执行router
app.use('/',router);
//如果监听的是根目录,路径可以省略不写,等价于
//app.use(router);
//启动服务
app.listen(8080,function(){
console.log('http://localhost:8080');
})
3.文件上传
- 中间件:文件上传需要用到formidable
- 安装 formidable
npm i -S formidable
- 基本使用:
//引入formidable
var formidable = require('formidable')
//监听路由
app.post('/file_upload', function (req, res) {
console.log('接收到请求')
//创建实例
var form = new formidable.IncomingForm();
//设置上传文件存放的目录
form.uploadDir = "./uploads"
//保持原来的文件的扩展名
form.keepExtensions = true;
console.log('开始解析表单')
//解析表单(异步方法)
form.parse(req, function(err, fields, files) {
console.log('解析表单中')
//返回文件信息
console.log(fields, files)
// res.send(util.inspect({fields: fields, files: files}))
});
console.log('解析表单结束')
res.send("ok")
})
文件上传后会自动在uploads文件夹中保存一份,只不过文件名是随机生成的

Node.js Express 框架(2)的更多相关文章
- Node.js Express 框架
Node.js Express 框架 Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP ...
- Node.js Express框架
Express 介绍 Express是一个最小的,灵活的Node.js Web应用程序框架,它提供了一套强大的功能来开发Web和移动应用程序. 它有助于基于Node Web应用程序的快速开发.下面是一 ...
- Node.js Express 框架学习
转载:http://JavaScript.ruanyifeng.com/nodejs/express.html#toc0 感觉很牛的样子,不过觉得对初学者没太大用,里面很多例子用的api都没有详细的说 ...
- Node.js Express 框架 Express
Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速 ...
- 44.Node.js Express 框架--web框架
转自:http://www.runoob.com/nodejs/nodejs-express-framework.html Express 简介 Express 是一个简洁而灵活的 node.js W ...
- Node.js+Express框架+Mongo学习(一)第一个node.js实例
1.在桌面新建一个空的文件夹,比如叫node,当然也可以在其它地方新建. 2.命令行进入到所新建的文件夹的目录,下载Express框架,再在这个文件夹里新建一个叫final的项目 3.在项目(fina ...
- Node.js Express 框架 POST方法
POST 方法 以下实例演示了在表单中通过 POST 方法提交两个参数,我们可以使用 server.js 文件内的 process_post 路由器来处理输入: index.htm 文件代码修改如下: ...
- Node.js Express 框架 GET方法
GET 方法 以下实例演示了在表单中通过 GET 方法提交两个参数,我们可以使用 server.js 文件内的 process_get 路由器来处理输入: index.htm 文件代码如下: < ...
- node.js+express框架 修改后自启【不需要再执行start】
我们每次修改完后都需要重新启动下才能刷新,就很麻烦'nodemon'解决了这个问题. 这里直接进行全局安装 npm install -g nodemon 安装到本地 npm install nodem ...
- Node.js Express 框架2
文件上传 以下我们创建一个用于上传文件的表单,使用 POST 方法,表单 enctype 属性设置为 multipart/form-data. index.html <html> < ...
随机推荐
- Redis 发布订阅模式
概述 Redis 的发布/订阅是一种消息通信模式:发送者(Pub)向频道(Channel)发送消息,订阅者(Sub)接收频道上的消息.Redis 客户端可以订阅任意数量的频道,发送者也可以向任意频道发 ...
- USB2.0 DP DM VBUS
在USB 2.0中,设备成功枚举的标志可以通过观察 D+ (dp).D- (dm) 和 VBUS 引脚的电压波形来判断.以下是这些信号在USB 2.0枚举过程中常见的状态: VBUS (5V供电): ...
- Linux-USB驱动笔记--设备控制器(UDC)驱动
1.前言 在Linux-USB驱动笔记(四)–USB整体框架中有説到设备侧的设备控制器(UDC),下面我们来具体看一下. 2.设备控制器(UDC) USB设备控制器(UDC)驱动指的是作为其他USB主 ...
- 轨道控制器 threejs
就是一个可以360转动的相机,通过不断的改变相机的参数 然后渲染达到效果. // 引入相机控件 -- 轨道控制器 // console.log('OrbitControls',OrbitContro ...
- Android复习(二)应用资源
1. res下的资源类型 目录 资源类型 animator/ 用于定义属性动画的 XML 文件. anim/ 用于定义渐变动画的 XML 文件.(属性动画也可保存在此目录中,但为了区分这两种类型,属性 ...
- dan
点击查看代码 /* GGrun */ #include<bits/stdc++.h> using namespace std; namespace Octane { //non terra ...
- 在 Kubernetes 中基于 StatefulSet 部署 MySQL(下)
大家好,我是老 Z! 上篇文章实现了 MySQL 数据库在基于 KubeSphere 部署的 K8s 集群上的安装部署,部署方式采用了图形化界面这种形式.本文将会介绍如何使用 GitOps 来部署 M ...
- jmeter-模拟带参数的请求与上传文件
请求参数照着前端请求的样式填即可: header带content: header不带content_type: 总结:上传文件时headers里面不能带content_type参数
- 什么是前后端分离应用(Full-stack Separation),想当然就会理解错
前后端分离应用指的是将应用的前端部分(用户界面与交互逻辑)和后端部分(业务逻辑.数据处理.服务器响应)拆分成独立的模块,各自通过 API 进行通信.这种架构设计的目的是提高开发效率.增强可扩展性和灵活 ...
- Tomcat线程池详解,为什么SpringBoot最大支持200并发?
Q:经典面试题,SpringBoot 应用可以同时并发处理多少请求? A:SpringBoot 应用并发处理请求数主要由两个因素影响,使用的 Servlet容器(默认使用 Tomcat,常用的还有 j ...