nodejs中怎么构建一个http服务,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
Node中的http模块
使用node构建http服务
实现一个静态资源服务器
使用模板引擎处理动态网页
结合数据库渲染动态页面
实现一个留言本案例
第三方HTTP服务框架
TCP和UDP 都属于传输层协议
HTTP,用于浏览器和服务器端进行通信,由于HTTP协议本身并不考虑数据如何传输等其他问题,所以属于应用层协议。
Node提供了基本的http和https模块用于HTTP 和 HTTPS的封装
const http = require('http') const server = http.createServer()
API | 说明 |
---|---|
Event: 'close' | 服务器关闭时触发 |
Event: 'request' | 服务器收到请求消息时触发 |
server.close() | 关闭服务 |
server.listening | 获取服务状态 |
API | 说明 |
---|---|
request.method | 请求方法 |
request.url | 请求路径 |
request.header | 请求头 |
request.httpVersioni | 请求http协议版本 |
API | 说明 |
---|---|
response.end() | 结束响应 |
response.setHeader(name, value) | 设置响应头 |
response.removeHeader(name, value) | 删除响应头 |
response.statusCode | 设置响应状态码 |
response.statusMessage | 设置响应状态短语 |
response.write() | 写入响应数据 |
response.writeHead() | 写入响应头 |
const http = require('http'); const path = require('path'); const mimie = require('mime'); // 返回扩展名对应的content-type const fs = require('fs'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { // res.setHeader('Content-type', 'text/plain charset=utf-8'); // 响应字符串 const url = req.url; if (url === '/') { fs.readFile(`./index.html`, (err, data) => { if (err) { throw err; } res.statusCode = 200; res.setHeader('Content-type', 'text/html; charset=utf-8'); // 响应html res.end(data); }); } else if (url.startsWith('/assets/')) { fs.readFile(`.${url}`, (err, data) => { if (err) { res.setHeader('Content-type', 'text/plain; charset=utf-8'); res.statusCode = 404; res.end('404 Not Fund.'); } // path.extname(url) 获取文件对应的扩展名 const contentType = mimie.getType(path.extname(url)); res.statusCode = 200; res.setHeader('Content-type', `${contentType}; charset=utf-8`); // 设置响应头 res.end(data); }); } else { res.statusCode = 404; res.setHeader('Content-type', 'text/plain; charset=utf-8'); res.end('404 Not Fund.'); } // console.log('req', Object.keys(req)); }); server.listen(port, hostname, () => { console.log(`server running at http://${hostname}:${port}`); });
contentType对照表:http://tool.oschina.net/commons
marko
nunjucks
handlebars.js
ejs
Pug
art-template
template-engine.js
const http = require('http'); const path = require('path'); const fs = require('fs'); const template = require('art-template'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { const url = req.url; const fileBaseUrl = path.join(__dirname); if (url === '/') { fs.readFile('./template-engine.html', (err, data) => { data = data.toString(); const ret = template.render(data, { msg: 'world', todos: [ { title: '吃饭', completed: false }, { title: '睡觉', completed: true }, { title: '打豆豆', completed: false } ] }); res.setHeader('Content-type', 'text/html charset=utf-8'); // 响应字符串z res.end(ret); res.statusCode = 200; }); } }); server.listen(port, hostname, () => { console.log(`server running at http://${hostname}:${port}`); });
template-engine.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> </head> <body> <div class="title">我是我{{ msg }}</div> <ul> {{ each todos }} <li> {{ $value.title }} <input type="checkbox" {{ $value.completed ? 'checked' : '' }} /> </li> {{ /each }} </ul> </body> </html>
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。