1.显示文件夹或子文件及子文件
const fs=require('fs') function readFile(path) { let obj={} if(fs.statSync(path).isFile()){ return `{${path}:true}` } let arr=fs.readdirSync(path) arr.forEach((val)=>{ let pas=path+"/"+val let result = fs.statSync(pas).isFile(); if(!result){ obj[val]=readFile(pas) }else{ obj[val]=true } }) return obj } path='' fs.writeFileSync('./data.json',JSON.stringify(readFile(path))); console.log(readFile(path))
2.利用http模块 开启服务器
let http=require('http') let server=http.createServer() let url=require('url') let fs=require('fs') const https = require('https'); server.on('request',(req,res)=>{ const urlStr=req.url //匹配相应的路径 写入对应的文件 if(urlStr== '/'){ let data = fs.readFileSync('./index.html'); res.write(data); res.end(); } //匹配相应的路径 发送请求 响应的数据 写入到相应的地方 if(url.parse(urlStr).pathname == '/v2/music/search'){ //向豆瓣的后台发送请求 https.request({ hostname: 'api.douban.com', port: 443, path: urlStr }, (re)=>{ //请求成功 let value = ''; //监听接收数据 re.on('data', (bf)=>{ value += bf; }), //监听数据接收完成 re.on('end', ()=>{ //得到所有数据,响应客户端 // res.write(value) fs.writeFileSync('./data.json', value); res.end(); }) }).end(); } }) //启动服务器 server.listen(1314,(error)=>{ if(error){ console.log('服务器启动失败') }else{ console.log('服务器启动成功') } })
3.利用express第三方模块开启服务器
//proxy模块 let https=require('https') module.exports=proxy=(name,path)=>{ console.log(`[HPM] Proxy created: / -> https://${name}`) return (req,res)=>{ url=req.url https.request({ hostname: name, port: 443, path:path+url },(re)=>{ let value=''; re.on('data',(bf)=>{ value+=bf }) re.on('end',()=>{ res.json(JSON.parse(value)); }) }).end() } }
const fs=require('fs') //自定义模块 const proxy=require('./proxy')
//以下均为第三方模块 const express=require('express') const proxys=require('http-proxy-middleware') const server=express() server.get('/',(req,res)=>{ const result2=fs.readFileSync('./index.html') res.end(result2) })
//自定义模块 server.use('/v2',proxy('api.douban.com','/v2'))
//第三方模块引入的方法 server.use('/v4', proxys({target: 'https://m.maizuo.com', changeOrigin: true})); //开启服务器 server.listen(1314,(error)=>{ if(error){ console.log('服务器启动失败') }else{ console.log('服务器启动成功') } })
3.设置模板引擎
const express=require('express') const server=express() const swig=require('swig') // 设置模板引擎 为html server.set('view engine','html') // 设置模板放置的位置 server.set('views', './www'); //设置该模板引用的模块 server.engine('html', swig.renderFile); //使得引用模板后不缓存 swig.setDefaults({cache: false}); server.get('/',(req,res)=>{ // 通过该callback函数返回视图的呈现HTML // 参数一:呈现在哪个页面 // 参数二:呈现在页面中的变量 在html利用{{}}可以直接写入变量 // 参数三:回调 const d=new Date().getHours() // 当前路径+那个页面 res.render('home', { nav: [ '今日特价', '优选商品' ], number:{ a:1, b:3, c:4 }, day:d>5&&d<6?true:false }) }) server.listen(1314,(error)=>{ if(error){ console.log('服务器启动失败') }else{ console.log('服务器启动成功') } })
4.开启路由
通过路由,可以在返回页面之前,先通过中间件执行若干事物,将这些事物放在中间件里面,形成一种模块。增强代码的可读性
const router = new express.Router();
5.mongodb数据库+服务器
const express=require('express') const swig=require('swig') const mongoose=require('mongoose') new Promise((resolve,reject)=>{ // 连接数据库 mongoose.connect('mongodb://localhost:1314',(error)=>{ if(error){ console.log('连接数据库失败'); console.log(error); }else{ console.log('连接数据库成功'); resolve(); } }) }).then(()=>{ // 开启服务器 server=express() // 处理静态资源文件 server.use('/static', express.static('./www')); //处理html文件 // 利用模板引擎 server.set('view engine', 'html'); server.set('views', './www/html'); server.engine('html', swig.renderFile); swig.setDefaults({cache: false}); // 引入html路由配置 moduleHtml=require('./router/moduleHtml') server.use('/',moduleHtml) //处理ajax文件 moduleAjax=require('./router/moduleAjax') server.use('/api',moduleAjax) // 指定服务器配置 server.listen(1314,(error)=>{ if(error){ console.log('服务器启动失败'); }else{ console.log('服务器启动成功'); } }) })