ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
~~~ //该模块负责封装所有路由判断代码 var fs=require('fs'); var path=require('path'); var querystring=require('querystring'); module.exports = function(req, res) { //根据用户请求的路径,将对应的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 (req.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() === req.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) { req.query.id = arr.length; arr.push(req.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."); } } //封装读取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); }); } ~~~ //index.js ~~~ var router=require('./router.js'); //调用router.js模块的返回值(函数),并将req 和res 对象传递给router.js模块 router(req,res); ~~~