Node.js_后端路由(二)
接着上一篇Node.js_后端路由(一)进行改进优化,有困惑之处可以回头查漏补缺。
-
通过routerMap收集事件
const routerMap = { get:{}, post:{} }
-
router.get/router.post注册事件
-
index.js
一旦页面中的URL地址发生改变,就会触发createServer()函数。
注册事件包含两个参数,第一个参数是path路径,第二个参数是回调函数。
const http = require("http"); const router = require("./router") const server = http.createServer(router) router.post("/user/register", (req, res) => { res.json({ code: 200, errMsg: '' }) }) server.listen(9000)
通过上面的router.post将事件注册到routerMap中。
router.get = function(path,callback){ routerMap.get[path] = callback; } router.post = function(path,callback){ routerMap.post[path] = callback; }
-
-
router.js
const url = require("url"); const fs = require("fs"); const path = require("path"); const qs = require("querystring") //收集事件 const routerMap = { get: {}, post: {} } const router = function (req, res) { //给res添加一个json方法 res.json = function (obj) { res.end(JSON.stringify(obj)) } //处理静态资源,在上一篇文章Node.js_后端路由(一)中提到 handleStatic(req, res); //获取用户请求的方式 var method = req.method.toLowerCase(); //获取用户请求的地址 var { pathname, query } = url.parse(req.url, true); if (method === "get") { if (routerMap.get[pathname]) { //将query的值赋值给req.query req.query = query; routerMap.get[pathname](req, res) } else { res.end("404") } } else if (method === "post") { if (routerMap.post[pathname]) { var str = ""; //获取post传递的参数 req.on("data", (data) => { str += data; }) req.on("end", () => { req.body = qs.parse(str); routerMap.post[pathname](req, res) }) } } } //注册事件 router.get = function (path, callback) { routerMap.get[path] = callback; } //注册事件 router.post = function (path, callback) { routerMap.post[path] = callback; } //处理所有的静态资源访问 function handleStatic(req, res) { var { pathname } = url.parse(req.url, true); //获取文件的后缀,使用lastIndexOf找最后的“.”更为严谨 var ext = pathname.substring(pathname.lastIndexOf(".")); if (pathname === "/") { res.writeHead(200, { "content-type": "text/html;charset=utf8" }); res.end(getFile(path.join(__dirname, "../public/index.html"))) } else if (ext === ".css") { res.writeHead(200, { "content-type": "text/css;charset=utf8" }); res.end(getFile(path.join(__dirname, "../public", pathname))); } else if (ext === ".js") { res.writeHead(200, { "content-type": "application/x-javascript;charset=utf8" }); res.end(getFile(path.join(__dirname, "../public", pathname))); } else if (/.*\.(jpg|png|gif)/.test(ext)) { res.writeHead(200, { "content-type": `image/${RegExp.$1};charset=utf8` }); res.end(getFile(path.join(__dirname, "../public", pathname))); } else if (ext === ".html") { res.writeHead(200, { "content-type": "text/html;charset=utf8" }); res.end(getFile(path.join(__dirname, "../public", pathname))); } } function getFile(filePath) { return fs.readFileSync(filePath); } module.exports = router;
-
将简易版的路由发布到npm网站中
- 在终端登录npm
-
npm login
-
输入用户名
-
输入密码,10位以上(注意:密码不可见,全凭感觉)
-
输入邮箱(会提示登录成功)
-
查看当前镜像源:nrm ls
-
确保使用的是npm镜像源:nrm use npm
-
上传所有npm publish .
-
下载时安装router-lxc
网友评论