个人意见供参考哈:
1、《Node.js高级编程》2、《了不起的Node.js:将JavaScript进行到底》3、《 全栈开发之道:MongoDB+Express+AngularJS+Node.js 》
你的dataType写错了
你得到的req.url应该是"/路径" , 而fs.readFile读的应该是"路径"就够了, 没有前面的斜杠
漏了48关键的一行
换为new URL 这样获取 pathname:
let {pathname}=new URL(req.url,'http://locathost:3000')
找到错了,这里解构赋值写错了, let {pathName, query} = url.parse(req.url,true),我以为pathName是随意命名的,打印了 url.parse(req.url,true)才知道是
Url { protocol: null, slashes: null, auth: null, host: null, port: null, hostname: null, hash: null, search: '?username=qinfubin&password=123456', query: [Object: null prototype] { username: 'qinfubin', password: '123456' }, pathname: '/login', path: '/login?username=qinfubin&password=123456', href: '/login?username=qinfubin&password=123456'}
我也是这个问题,请问楼主知道怎么解决了嘛?
这个执行有些不对吧
你的html 的名字 写的是 index.html,而你在浏览器中访问的是1.html
有,切图的课,https://www.imooc.com/learn/1228
url.parse 这个已经被废弃的原因吧
这个是要处理权限控制的
从从c盘根目录去找往下一级一级去找,或者转移到文件夹下面,或者用vscode打开有个终端控制台也可以直接使用
可以找别的视频
不是,get和post是http不同的请求方式,跟同步异步没有关系
同步异步主要是指程序中调用某个方法或接口时,是否等待方法执行结束,再继续执行后面的程序代码。
同步既是等待方法执行结束,再继续执行后面的代码
异步是不等待方法执行结束,继续执行后面的代码,一般异步方法会传递一个回调函数,回调函数会在方法执行结束时,被触发调用。
举个实际的例子,小明要烧开水喝,看电视。同步既是插上电,烧水,等待水烧好,倒在杯子里,再端着水去看电视。异步既是插上电,烧水,接着就去看电视,等水烧好了,再去倒水来喝。
图2 才是正常的初始化模块的步骤,图1是你进入了node的命令行工具,初始化工作不能在命令行工具状态执行,图1中的提示信息也说明了,应该退出命令行状态操作
hello,你好
你的也可以哦。只不用你这个格式的话,在获取值和赋值的时候就要改一下了。
比如视频中拿到用户名admin之后,获取密码是user[username],相当于user.admin,拿到密码123456,。
而用你的个格式,就要先去查找,user.username===admin的, 然后才拿到对应的密码。
并且你的也有点问题,应该是一个数组才对,毕竟用户是多个的。
用你的思维去写的话,应该如下:
let user=[ { _id:'xxxxxxx', username:'admin', password:1'23456' }, { _id:'xxxxxxx', username:'user1', password:1'23456' } ]
ctrl + c
你把你写的代码贴出来,不然怎么知道你哪里写错了
我觉得这个没有什么可纠结吧,每个人可以自己的逻辑,老师讲的是他自己的逻辑,最终结果一样应该就行,比如我自己写的就跟老师的不同。重在理解吧
const http = require('http'); const fs = require('fs'); const querystring = require('querystring'); const registeredUserInfos = {}; http.createServer((req, resp) => { if (req.method == 'GET') { fs.readFile(`./${req.url}`, (err, data) => { if (err) { resp.writeHead(404); resp.end('Page not found.'); } else { resp.end(data); } }); } else if (req.method == 'POST') { let data = []; req.on('data', (chunk) => { data += chunk; }); req.on('end', () => { let params = querystring.parse(data); if (params.action == 'reg') { if (registeredUserInfos[params.username]) { resp.writeHead(500); resp.end('Invalid user account, Please choose other to try.'); else { registeredUserInfos[params.username] = params; resp.end('Registered successfully!'); } } else if (params.action == 'login') { if (!registeredUserInfos[params.username]) { resp.writeHead(500); resp.end('Invalid user account, Please choose other to try.'); } else { let userinfo = registeredUserInfos[params.username]; if (params.password == userinfo.password) { resp.end('Login successfully'); } else { resp.end('Invalid user password, Please choose other to try.'); } } } else { resp.writeHead(500); resp.end('Invalid action, Please choose other to try.'); } }); } }).listen(3000);
因为,如果在head里的话,在代码执行的时候会先执行js部分的内容,这个时候还没有dom节点,所以在head里不起作用,现在body里就是为了保证在js执行的时候是有dom存在的
噢 原来在后面讲了 我着急了
看图就能明白了:
自带的,装了node就有的哦
是node自带的模块啊
let http = require('http') 我用这个没有报错
我也是,改成当前路径就好了,老师的放置位置和我们的不一样
fs.readFile(`.${path}`, (err, data) => {}