美文网首页WEB前端程序开发Web前端之路我的日更计划
nodejs09-静态服务器+简单ejs+获取form提交的数据

nodejs09-静态服务器+简单ejs+获取form提交的数据

作者: 经纬文学 | 来源:发表于2019-11-08 16:31 被阅读0次

    nodejs 搭建静态web服务器

    拆分【07-搭建静态web服务】中http.js

    新建model/router.js
      /**
       * req = request 获取浏览器参数
       * res = response 返回数据
      */
    
    
      var fs = require('fs')
      var events = require('events')
      var url = require('url')
      var path = require('path')
      var EventEmitter = new events.EventEmitter()
      exports.static = function(req, res){
        var urlName = url.parse(req.url).pathname
    
        if (urlName == '/favicon.ico') return
      
        if (urlName == '/') {
          urlName = 'index.html'
        }
        /**
         * 过滤掉?之后的数据
         * 例: www.xx.com/index.html?asdasdadas=2 -----> www.xx.com/index.html
         */
        getSuffixName(path.extname(urlName))
        EventEmitter.on('send', (suffixName)=>{
          fs.readFile(`static/${urlName}`, (err, data)=>{
            if (err) {
              fs.readFile('static/404.html', (error, result)=>{
                if (error) return
                res.writeHead(200, {"Content-Type": `${suffixName};charset=UTF-8`});
                /**
                 * 使用EventEmitter会出现Error [ERR_STREAM_WRITE_AFTER_END]: write after end错误
                 * 这边建议直接end返回
                */
                // res.write(result)
                res.end(result)
              })
            } else {
              res.writeHead(200, {"Content-Type": `${suffixName};charset=UTF-8`});
              // res.write(data)
              res.end(data)
            }
          
          })
        })
    
      }
    
    
    function getSuffixName (url) {
    
      fs.readFile('model/mime.json', 'utf8',(err,data)=> {
        if (err){
          console.log(err)
          return
        }
        var result = JSON.parse(data)
        for (var i in result) {
          if (i == url) {
            // return result[i]
            EventEmitter.emit('send', result[i])
            return
          }
        }
      })
    
    }
    
    
    http.js
    var http = require('http');
    var path = require('path')
    
    var router = require('./model/router')
    /**
     * http.createServer()创建http服务器
    */
    console.log(path.extname('index.html')) // 输出.html
    http.createServer(function(req,res){
      router.static(req,res)
    
    }).listen('8080')
    
    console.log('server is running')
    

    简单的使用ejs模板

    安装 npm install ejs --save-dev
    具体使用查看官网ejs官网

    index.js
    var http = require('http')
    var url = require('url')
    var ejs = require('ejs')
    
    
    
    http.createServer(function(req, res){
      if (req.url == '/favicon.ico') return
    
      res.writeHead(200, {"Content-Type": "text/html;charset=UTF-8"})
      var pathname = url.parse(req.url).pathname
    
      if (pathname == '/login') {
        ejs.renderFile('views/login.ejs', {
          msg: '你好啊'
        }, (err, data)=>{
          if (err) {
            console.log(err)
            return
          }
          res.end(data)
        })
      } else {
        res.end('结束')
      }
    }).listen('8089')
    
    console.log('server is Running at 8089')
    
    新建views/login.ejs
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
    </head>
    <body>
        <p>ejs模板--登录</p>
        <p><%=msg  %></p>
    </body>
    </html>
    

    form表单 提交数据

    views/form.ejs
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
    </head>
    <body>
      <form action="/dologin" method="post">
        <input type="text" name="name" >
        <br>
        <input type="text" name="password">
        <br>
        <input type="submit" value="提交">
      </form>
    </body>
    </html>
    

    获取get提交的数据

    get.js
        /**
         * 获取数据
        */
        var query = url.parse(req.url).query
    
        console.log(query)
        res.end(query)
    

    获取post提交的数据

    post.js
        /**
         * 获取数据
        */
        var postData = ''
        req.on('data', (data)=>{
          postData += data
        })
        req.on('end', (err, data)=>{
          fs.appendFile('login.txt', `${postData}\n`, (err, data)=>{
            if (err) {
              console.log(err)
              return
            }
            console.log('写入成功')
          })
          res.end(postData)
        })
    

    相关文章

      网友评论

        本文标题:nodejs09-静态服务器+简单ejs+获取form提交的数据

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