开发者课程【Node.js 入门与实战:渲染 index 页面新闻列表数据01】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/588/detail/8284
渲染 index 页面新闻列表数据01
内容介绍:
一、 实现 post 方式提交新闻
二、首页显示新闻列表
一、 实现 post 方式提交新闻
// 1.加载 http模块
var http = require( " http);
var fs = require( 'fs');
var path = require( " path');
var mime = require( " mime ' );
var url = require( 'url');
var querystring = require( " querystring');
// 2.创建服务
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,not found. ");
return;
}
res.setHeader( 'Content-Type' , mime.getType(filename));
res.end(data);
});
};
//将用户请求的Iurl 和 method 转换为小写字母req.url =
req.url.toLowerCase();
req.method = req.method.toLowerCase();
//通过url模块,调用url.parse()方法解析用户请求的 url (req.url)
var ur10bj = url.parse(req.url,true);
//先根据用户请求的路径(路由),将对应的HTMIL页面显示出来
if (req.url === '/' || req.url === ' /index' && req.method === 'get ') {
//读取 index.html
res.render(path.join( dirname. 'views '. 'index.html' ));
}else if (req.url === '/submit' && req.method === 'get'){
//读取submit.html并返回
res.render(path.join( _ dirname,'views ', 'submit.html'));
}else if (req.url == '/item’8& req.method == 'get') {
//读取 details.html 并返回
res.render(path.join( __dirname,'views ', 'details.html'));
}else if (req.url.startswith( " /add ' ) && req.method === 'get') {
//此处,读取文件的时候可以直接写一个utf8编码,这样的话,回调函数中的 data就是一个字符串了
fs.readFile(path.join(__dirname, 'data', 'data.json'), 'utf8' , function(err, data){
// "[{"title" : "xxx" , "url" :"ffff", "text" : "dddd"}]"
consoLe.log( '--------------' + data);
//因为第一次访问网站, data.json文件本身就不存在,所以肯定是有错误的
//但是这种错误,我们并不认为是网站出错了,所以不需要抛出异常
if (err && err.code !== "ENOENT'){
throw err;
}
//如果读取到数据了,那么就把读取到的数据 data,转换为list数组//如果没有读取到数据,那么就把'[]’转换为数组
var list = JSON.parse(data || '[]");
// 向数组对象list中push一条新闻
list. push(urfIObj .query);
// 2.把用户提交的新闻数据保存到data.json 文件中
//把list数组中的数据写入到data.json 文件中
fs .writeFile(path. join(__ dirname, ' data', ' data. json' ),JSON. stringify(list), function(err) {
if (err) {
throw err;
}
console. log('ok');
//设置响应报文头,通过响应报文头告诉浏览器,执行一次页面跳转操作
// 3.跳转到新闻列表页
//重定向
res . statusCode = 302;
res. statusMessage = ' Found';
二、显示新闻列表
//通过url模块,调用url.parse()方法解析用户请求的url (req.url)
var url0bj = url.parse(req.url,true);
//先根据用户请求的路径(路由),将对应的HTMIL页面显示出来
if (req.url == 'l' ll rey.url as= ' /index' 8& req.method =a= 'get '){
1.读取 data.json文件中的数据,并将读取到的数据转换为list 数组
fs.readFile(path.join(__dirname,'data', 'data.json'),'utf8', function(err,data){
if (err 8& err.code T=="ENOENT') {
throw err;
}
var list = JSON.parse(data ll '[]");
2. 在服务器端使用模板引擎,将 list中的数据和
index.html 文件中的内容结合渲染给客户端
//读取-index.html
……res.render(path.join( ._dirname , . "'views ' , . 'index.html'));
});