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文件夹中保存一份,只不过文件名是随机生成的

posted @ 2024-04-26 17:12  ---空白---  阅读(3)  评论(0编辑  收藏  举报