node-example |--data(存放项目数据的文件夹) |--detail.json(存放食品详情数据) |--foods.json(存放首页食品数据) |--model(提供访问和操作数据服务的数据模型) |--detail.js(详情数据访问模块) |--foods.js(食品数据访问模块) |--public(存放css,js,图片等静态文件) |--css(存放css文件的文件夹) |--img(存放图片的文件夹) |--js(存放js文件的文件夹) |--route(路由,控制器) |--api(处理普通请求的路由,或者叫控制器) |--static(处理静态文件请求的路由,或者叫控制器) |--views(视图,即用户界面) |--index.html(主页界面) |--detail.html(详情页面) |--server.js(服务器启动文件) |--package.json(项目包信息) |--README.md(项目信息以及启动方法描述)
var http = require('http');
var url = require('url');
var api = require('./route/api');
var static = require('./route/static');
// 匹配静态文件夹路径的正则表达式,用于判定请求是否为静态文件请求
var staticExp = /\/public\/(img|css|js)\/[a-z]*\.(jpg|png|gif|css|js)/;
http.createServer((req, res) => {
var pathname = url.parse(req.url).pathname;
if (staticExp.test(pathname)) {// 静态文件请求交由static处理
static.get(__dirname + pathname, res);
} else if (req.method == 'POST') {// 处理普通post请求
api.post(req, res);
} else {// 处理普通get请求
api.get(req, res);
}
}).listen(3000);
console.log('[Server Info] Start server at http://localhost:3000/');
var fs = require('fs');
var path = require('path');
var MIME = {};
MIME[".css"] = "text/css";
MIME[".js"] = "text/js";
MIME[".jpg"] = "image/jpeg";
MIME[".jpeg"] = "image/jpeg";
MIME[".png"] = "image/png";
MIME[".gif"] = "image/gif";
function get(pathname, res) {
if (fs.existsSync(pathname)) {
var extname = path.extname(pathname);
res.writeHead(200, {'Content-Type': MIME[extname]});
fs.readFile(pathname, (err, data) => {
if (err) {
console.log(err);
res.end();
} else {
if (isImage(extname)) {
res.end(data, "binary");// 二进制文件需要加上binary
} else {
res.end(data.toString());
}
}
});
}
}
// 根据拓展名判断是否为图片
function isImage(extname) {
if (extname === '.jpg' || extname === '.jpeg' ||
extname === '.png' || extname === '.gif') {
return true;
}
return false;
}
// 提供给其他模块使用的接口
module.exports = {
get: get
};
var fs = require('fs');
var url = require('url');
var querystring = require('querystring');
var foods = require('../model/foods')();
var detail = require('../model/detail')();
var getHandler = {};
var postHandler = {};
// 处理对主页的请求
getHandler['/'] = function(req, res) {
var foodMenu = "";
// 拼装首页数据
var food = foods.getAllFoods();
for (var i = 0; i < food.length; ++i) {
foodMenu += '<div class="food-card" id="' + food[i].id + '"><img src="';
foodMenu += food[i].image + '"><h1>' + food[i].name + '</h1><h2>' + food[i].price + '</h2></div>';
}
res.writeHead(200, {"Content-Type": "text/html"});
fs.readFile(__dirname + '/../views/index.html', (err, data) => {
if (err) {
console.log(err);
res.end();
} else {
// 动态渲染模板
res.end(data.toString().replace('{{foodMenu}}', foodMenu));
}
});
};
// 处理对详情页面的请求
getHandler['/detail'] = function(req, res) {
var query = querystring.parse(url.parse(req.url).query);
var foodDetail = detail.getDetail(query.id);
res.writeHead(200, {"Content-Type": "text/html"});
fs.readFile(__dirname + '/../views/detail.html', (err, data) => {
// 动态渲染模板
res.end(data.toString().replace('{{image}}', foodDetail.image)
.replace('{{name}}', foodDetail.name)
.replace('{{description}}', foodDetail.description)
.replace('{{price}}', foodDetail.price));
});
};
// 404响应,告知客户端资源未找到
getHandler['/404'] = function(req, res) {
res.writeHead(404, {"Content-Type": "text/plain"});
res.end("404 Not Found");
};
// post请求的处理方法示例
postHandler['/'] = function(res, data) {
// do something
};
// get请求
function get(req, res) {
var reqUrl = url.parse(req.url);
if (typeof getHandler[reqUrl.pathname] === "function") {
getHandler[reqUrl.pathname](req, res);
} else {
getHandler["/404"](req, res);
}
}
// post请求(示例)
function post(req, res) {
var reqUrl = url.parse(req.url);
if (typeof postHandler[reqUrl.pathname] === "function") {
var postData = "";
req.on('data', (data) => {
postData += data;
});
req.on('end', () => {
postData = querystring.parse(postData);
postHandler[reqUrl.pathname](res, postData);
});
} else {
getHandler["/404"](req, res);
}
}
// 提供给其他模块使用的接口
module.exports = {
get: get,
post: post
};
{
"foods": [{
"id": "number",
"image": "string",
"name": "string",
"price": "string"
}]
}
var fs = require('fs');
module.exports = function() {
// 读取文件中的数据,将其转成一个对象方便使用
var data = JSON.parse(fs.readFileSync(__dirname + '/../data/foods.json'));
var foods = {
getAllFoods: getAllFoods,
getFood: getFood
};
// 获取所有食品
function getAllFoods() {
return data.foods;
}
// 根据id获取单个食品
function getFood(id) {
for (var i = 0; i < data.foods.length; ++i) {
if (data.foods[i].id == id)
return data.foods[i];
}
}
return foods;
};
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有