node留言本制作

加粗样式
创建message文件夹
在此文件夹下建public目录,用于储存静态资源文件
在view用于放置html文件
index.html

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8" />
    <title></title>
    <link
      rel="stylesheet"
      href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
      integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
      crossorigin="anonymous"
    />
  </head>
  <body>
    <div class="header container">
      <div class="page-header">
        <a href="/post" class="btn btn-success">发表留言</a>
      </div>
    </div>

    <div class="container">
      <ul class="list-group">
        {{each comments}}
        <li class="list-group-item">
          {{ $value.name }} Say:{{ $value.message }}
          <span class="pull-right">{{ $value.dateTime }}</span>
        </li>
        {{/each}}
      </ul>
    </div>
  </body>
</html>

error.html

<!DOCTYPE html>
<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>
    <h2>找不到你要的页面</h2>
</body>
</html>

post.html

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8" />
    <title></title>
    <link
      rel="stylesheet"
      href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
      integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
      crossorigin="anonymous"
    />
  </head>
  <body>
    <div class="container">
      <h1><a href="/">首页</a><small>发表评论</small></h1> 
      <hr />
      <!--
        静态文件一般放在public中
        html一般放在view中


        表单提交规则:
          需要提交的表单控件中必须具有name属性,
        表单提交行为:
          默认提交行为
          异步提交行为

          action提交的地址,请求的url地址
          method 表单提交的方法有post请求与get请求
      -->
      <form action="/pinglun" method="get">
        <div class="form-group">
          <label for="name">Your Name</label>
          <input
            type="text"
            name="name"
            class="form-control"
            id="name"
            required
            minlength="2"
            maxlength="10"
            placeholder="Your Name"
          />
        </div>
        <div class="form-group">
          <label for="message">magessage</label>
          <textarea name="message" class="form-control" id='message' rows="5" required minlength="5" maxlength="50"></textarea>
        </div>

        <button type="submit" class="btn btn-default">Submit</button>
      </form>
    </div>
  </body>
</html>

在根目录下创建app.js

var http = require('http')
var fs = require('fs')
var template = require('art-template')
var url = require('url');//路径解析
//处理响应
/*
request 请求事件处理对象,获取客户端请求
response 响应事件处理对象,向客户端发送响应

*/
var comments = [
    {
        name:'张三',
        message:'今天天气还行',
        dateTime:'2015-5-20'
    },
    {
        name:'李四',
        message:'今天天气还行',
        dateTime:'2015-5.20'
    },
    {
        name:'王五',
        message:'今天天气还行',
        dateTime:'2015-5.20'
    },
    {
        name:'小六',
        message:'今天天气还行',
        dateTime:'2015-5.20'
    }
]
var server =  http.createServer()
    server.on('request',function(req,res){
        //利用url.parse路径方法转换成一个方便操作的对象 ,第二个参数true表示直接将查询字符串转化成一个字符串,(通过query属性)
        var urlPath = req.url
        var objParse = url.parse(urlPath,true)
        //单独获取不包含?号后面的路径部分
        var pathname = objParse.pathname
        if(pathname === '/'){
            fs.readFile('./view/index.html',function(err,data){
                if(err){
                    return res.end('获取文件失败')
                }
               var ntmlSte =  template.render(data.toString(),{
                    comments:comments
                })
                res.end(ntmlSte)
            })
        }else if(pathname === '/post'){
            fs.readFile('./view/post.html',function(err,data){
                if(err){
                    return
                }
                res.end(data.toString())
            })
            
        } else if(pathname.indexOf('/public/') === 0){
            fs.readdir('.' + pathname,function(error,files){
                if(error){
                    response.end('404 Not Find Page');
                }
            })
        }else if(pathname === '/pinglun'){
            //不用担心?之后是什么,pathname不包含?之后的路径
            //一个请求对应一个响应,不然会报错,记住坑
            // res.end(JSON.stringify(objParse.query))
            //已经用url的parse方法将请求路径中的查询字符串解析成一个对象
            //接下来获取表单提交的数据objParse.query
            //生成日期数据到对象中,然后储存到数组中
            var comment = objParse.query
            comment.dateTime = '2017-2-3'
            comments.unshift(comment)
            //让客户重定向跳转到首页,
            //如何通过服务端让客户端重定向:
            
            /*
            状态码设置为302临时重定向
            statusCode
            在响应头中通过location告诉客户端往哪重定向
            setHeader
            如果客户端收到服务端状态码为302会自动去响应头中寻找location,然后重定向
            */
           res.statusCode = 302
           res.setHeader('Location','/')
           res.end()
           return
            //当用户重新请求/得时候,数组中得数据已经发生变化,用户看到得是变化后的数据
        }
        else{
                fs.readFile('./view/error.html',function(err,data){
                    res.end(data)
                })
        }
    })

server.listen(3000,'127.0.0.1',function(){
    console.log('服务器启动成功')
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值