企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
~~~ //当前项目(包)的入口文件 //实现get方式添加新闻 //1.加载http模块 var http =require('http'); var fs=require('fs'); var path=require('path'); var mime=require('mime'); //加载url模块 var url=require('url'); //2.创建http服务 http.createServer(function(req,res){ //为res对象添加一个render()函数,方便后续使用 res.render=function(filename){ 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; } 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); console.log(urlObj); //根据用户请求的路径,将对应的html页面显示出来 if(req.url==='/'||req.url==='/index'&&req.method==='get'){ //读取index.html 并返回 res.render(path.join(__dirname,'views','index.html')); }else if(req.url==='/item'&&req.method==='get'){ //读取detail.html并返回 res.render(path.join(__dirname,'views','detail.html')); }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'){ //表示get方法提交一条新闻 //要获取用户提交过来的数据,需要用到url模块(这个模块是node.js内置模块,不是第三方模块) //1.获取用户get提交过来的新闻数据 //urlObj.query.title //urlObj.query.url //urlObj.query.text //2.1读取 data.json文件中的数据,并将读取到的数据转化为一个数组 //此处读取文件的时候可以直接写一个utf8编码,这样的话,回调函数中的data就是一个字符串了 fs.readFile(path.join(__dirname,"data",'data.json'),'utf8',function(err,data){ //因为第一次访问网站 ,data.json文件本身就不存在,所以肯定是有错误的,但是这种错误,我们并不认为是网站出错了,所以不需要抛出异常 //ENOENT没有这样的文件或者目录 if(err&&err.code !=='ENOENT'){ throw err; } //如果读取到了数据,就把读取到的数据data转换成arr数组,相反如果没有读取到数据就把[]转换为数组 var arr=JSON.parse(data ||'[]');//字符串解析为数组 arr.push(urlObj.query); //2.把用户提交的数据保存到data.json文件中 //把arr数组中的数据写入到data.json文件中 fs.writeFile(path.join(__dirname,'data','data.json'),JSON.stringify(arr),function(err){ if(err){ throw err; } console.log('ok'); //3.跳转到新闻列表页 //通过设置http响应报文头实现浏览器重定向操作 //以3开头的都表示要做跳转 res.writeHead(302,'Found',{'Location':'/'}) res.end(); }); }); }else if(req.url==='/add'&&req.method==='post'){ //表示post方法提交一条新闻 }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"); }) ~~~ ![](https://box.kancloud.cn/1b36c1194a0af3a412818c0940db8379_1047x497.png)