node的服务器路径跟物理文件没有绝对映射关系,但是node可以相对于apache服务器更加灵活的去创建。
可以利用简单的文件流的读取去模拟获取JSON数据,但是这个会存在问题。
- 一是类似Apache服务器的关系映射表的处理。
- 二是针对不同的文件后缀名,需要考虑的是对不同后缀名的请求头的设置
const http = require('http');
const fs = require('fs');
http.createServer((req,res) => {
fs.readFile('./public/news.json', (error, data) => {
if (error) {
throw error;
}
res.end(data)
})
}).listen(3000, () => console.log('Server port start ....'));
需要做到的是:服务器指明文件类型,也就是MIME。 MIME:文件后缀名和文件类型的映射表
我们在public目录下创建两个文件夹,一个为商品goods,一个为新闻news。
- node.js代码:
const http = require('http');
const fs = require('fs');
const url = require('url');
const path = require('path');
let MIME = {
".html": "text/html;charset=utf8",
".css": "text.css",
".jpg": "image/jpeg",
".gif": "image/gif",
".png": "image/png",
".js": "application/x-javascript",
".json": "text/json"
}
http.createServer((req, res) => {
// 1. 获取用户的url路径
let pathname = url.parse(req.url).pathname;
let extname = path.extname(pathname);
// 2. 通过node模拟Apache路径的映射关系
fs.readFile('./public' + pathname, (error, data) => {
if (error) {
// 防止出现乱码
res.setHeader('Content-Type', 'text/html;charset=utf8');
res.end('404, 页面不存在');
return;
}
// 根据MIME映射表去判断文件后缀名去设置对应的请求头
res.setHeader('Content-Type', MIME[extname])
res.end(data)
})
}).listen(3000, () => console.log('Server port start ....'));
终端cd到指定目录,执行node代码
但是MIME表是可能存在文件拓展名不存在表中映射关系的,因此需要借用
hasOwnProperty
方法来判断属性是否是该对象中的。
// 根据MIME映射表去判断文件后缀名去设置对应的请求头
if (MIME.hasOwnProperty(extname)) {
res.setHeader('Content-Type', MIME[extname])
}