<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ~~~ //當前項目(包)的入口文件 //實現get方式添加新聞 //實現顯示新聞詳情頁 //封裝讀取data.json文件的方法和寫入data.json文件的方法 //1.加載http模塊 var http = require('http'); var fs = require('fs'); var path = require('path'); var mime = require('mime'); //加載url模塊 var url = require('url'); //加載underscore var _ = require('underscore'); //加載querystring模塊 var querystring = require('querystring'); //2.創建http服務 http.createServer(function(req, res) { //為res對象添加一個render()函數,方便后續使用 //第二個參數tplData的作用是用來傳遞html頁面中要使用的模板數據 res.render = function(filename, tplData) { fs.readFile(filename, function(err, data) { if (err) { res.writeHead(404, 'Not Found', { 'Content-Type': 'text/html;charset=utf-8' }); res.end("404,page not found."); return; } if (tplData) { //如果用戶傳遞了模版數據,表示要進行模板替換 var fn = _.template(data.toString('utf8')); data = fn(tplData); } res.setHeader("Content-Type", mime.getType(filename)); res.end(data); }) } //設計路由 //當用戶請求 / 或者 /index的時候,顯示新聞列表---get請求 //當用戶請求 /item的時候,顯示新聞詳情---get請求 //當用戶請求 /submit的時候,顯示添加新聞頁面---get請求 //當用戶請求 /add時,將用戶提交的新聞保存到data.json文件中---get請求 //當用戶請求 /add時,將用戶提交的新聞保存到data.json文件中---post請求 //將用戶請求的url和method轉換為小寫字母 req.url = req.url.toLowerCase(); req.method = req.method.toLowerCase(); //通過url模塊,調用url.parse()方法解析用戶請求的url(req.url) var urlObj = url.parse(req.url, true); //根據用戶請求的路徑,將對應的html頁面顯示出來 if (req.url === '/' || req.url === '/index' && req.method === 'get') { readNewsData(function(arr) { //2.在服務器端使用模板引擎,將arr中的數據和index.html文件中的內容結合,渲染給客戶端 res.render(path.join(__dirname, 'views', 'index.html'), { arr: arr }); }); } else if (urlObj.pathname === '/item' && req.method === 'get') { //讀取detail.html并返回 //1.獲取當前用戶請求的新聞的id //urlObj.query.id //2.讀取 data.json文件中的數據,根據 id 找到對應新聞 readNewsData(function(list_news) { var model = null; //循環 list_news中的數據,找到和id值相等的數據 for (var i = 0; i < list_news.length; i++) { //判斷集合中是否有與用戶提交的id相等的新聞 if (list_news[i].id.toString() === urlObj.query.id) { //如果找到了對等的新聞 則將其記錄下來 model = list_news[i]; break; } } if (model) { res.render(path.join(__dirname, 'views', 'detail.html'), { item: model }); } else { res.end("NO such item"); } }); } else if (req.url === '/submit' && req.method === 'get') { //讀取submit.html并返回 res.render(path.join(__dirname, 'views', 'submit.html')); } else if (req.url.startsWith('/add') && req.method === 'get') { readNewsData(function(arr) { urlObj.query.id = arr.length; arr.push(urlObj.query); writeNewsData(JSON.stringify(arr),function(){ res.writeHead(302, 'Found', { 'Location': '/' }); res.end(); }); }); } else if (req.url === '/add' && req.method === 'post') { //1.讀取data.json文件中的數據 readNewsData(function(arr) { //2.讀取用戶post提交的數據 postData(req, function(postBody) { //3.為用戶提交的新聞增加一個id屬性,并把新聞對象push到arr數組中 postBody.id = arr.length; arr.push(postBody); //4.將新的list寫入到data.json文件中 writeNewsData(JSON.stringify(arr), function() { res.writeHead(302, 'Found', { 'Location': '/' }) res.end(); }); }) }); } else if (req.url.startsWith('/resources') && req.method === 'get') { //如果用戶請求是以/resources開頭,并且是get請求,就認為用戶是要請求靜態資源 res.render(path.join(__dirname, req.url)); } else { res.writeHead(404, 'Not Found', { 'Content-Type': 'text/html;charset=utf-8' }); res.end("404,page not found."); } }).listen(8888, function() { console.log("http://localhost:8888"); }) //封裝讀取data.json文件的方法 function readNewsData(callback) { fs.readFile(path.join(__dirname, "data", 'data.json'), 'utf8', function(err, data) { if (err && err.code !== 'ENOENT') { throw err; } var arr = JSON.parse(data || '[]'); //通過調用回調函數callback()將讀取到的數據arr 傳遞出去 callback(arr); }); } //封裝寫入data.json文件的方法 function writeNewsData(data, callback) { fs.writeFile(path.join(__dirname, 'data', 'data.json'), data, function(err) { if (err) { throw err; } //調用 callback()來執行當寫入數據完畢后的操作 callback(); }) } //封裝一個獲取用戶 post 提交的數據的方法 function postData(req, callback) { var list = []; req.on('data', function(chunk) { list.push(chunk); }); req.on('end', function() { var postBody = Buffer.concat(list); postBody = postBody.toString('utf8'); postBody = querystring.parse(postBody); //把用戶post提交的數據傳遞出去 callback(postBody); }); } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看