Node.js報錯信息Error:?Cannot?find?module?'XXX'問題及解決
Node.js報錯信息Error: Cannot find module 'XXX'
在桌面新建一個記事本里面寫上我們熟悉的HelloWord保存為后綴為js
我寫的只是個HelloWord而已,不涉及到任何包管理工具,所以也別去折騰什么NPM了,這個錯誤只是單純的找不到文件。
簡單的解決辦法
在桌面空白處摁著Shift鍵不放鼠標右鍵,選中在此處打開命令窗口然后再編妥妥的,或者在DOS界面鍵入路徑。
心得:其實就是個路徑的問題啦~
Nodejs運行后報錯Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
問題
在node的數據庫模塊中,運行后報錯
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
前提
在node中,res.send()是不能被同時調用兩次及以上的,也正好印證了報錯信息中所說的 Cannot set headers
情景
在用戶注冊接口中,邏輯為:
- 首先判斷用戶填寫的用戶名是否被占用
- 如果沒有被占用,再將該用戶信息插入到用戶表中
以上邏輯需要用到兩次數據庫操作,即db.query()
最開始我想當然的把兩次數據庫操作并列書寫,結果就報錯了。
原因
實際上這里涉及到數據庫操作異步的問題。
據我推測,db.query()是異步的,也就是說兩次數據庫操作可能會同時發(fā)生,也就意味著可能同時發(fā)生兩次res.send()操作,從而出現錯誤。
解決
知道上述原因之后就好解決了,直接把第二次db.query()放到第一次db.query()的處理函數中。
代碼
// 用戶注冊 exports.userRegister = (req, res) => { const userinfo = req.body // 1.判斷是否合法 (已經采用第三方包來進行驗證,不用ifelse) // if (!userinfo.username || !userinfo.password) { // // return res.send({ status: 1, msg: '用戶名或密碼不合法' }) // return res.cc('用戶名或密碼不合法') // } // 2.檢測用戶名是否被占用 const sqlStr = 'select * from ev_users where username=?' db.query(sqlStr, userinfo.username, (err, results) => { // 執(zhí)行sql語句失敗 if (err) { // return res.send({ status: 1, msg: err.message }) return res.cc(err) } // 判斷用戶名是否被占用 if (results.length > 0) { // return res.send({ status: 1, msg: '用戶名已被占用,請更換其他用戶名!' }) return res.cc('用戶名已被占用,請更換其他用戶名!') } /** * 注意這里存在一個異步的問題。如果兩個db.query()并行寫,就會存在兩次res.send同時發(fā)送的情況。 * 所以要避免,就把第二個db.query放在第一個db.query里面 */ // 3.調用bcrypt.hashSync對用戶密碼進行加密 userinfo.password = bcrypt.hashSync(userinfo.password, 10) // 4.插入用戶記錄 const sql = 'insert into ev_users set ?' db.query(sql, { username: userinfo.username, password: userinfo.password }, (err, results) => { // 判斷是否注冊成功 if (err) return res.cc(err) // 判斷影響行數是否為1 if (results.affectedRows !== 1) return res.cc('注冊用戶失敗,請稍后再試') // 用戶注冊成功 return res.send({ status: 0, msg: '注冊成功!' }) }) }) }
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- js控制臺報錯Uncaught TypeError: Cannot read properties of undefined (reading ‘appendChild‘)的解決
- node.js報錯:Cannot find module ''ejs''的解決辦法
- JavaScript報錯:Uncaught TypeError: Cannot set property ‘X‘ of undefine的解決方案
- 關于js復制內容到瀏覽器剪貼板報錯:Cannot read properties of undefined (reading ‘writeText‘)的解決方案
- vue項目啟動后,js-base64依賴報錯Cannot read properties of null(reading ‘replace’)問題
- JavaScript中報錯Cannot?set?properties?of?undefined?(setting?‘1‘)解決方案
相關文章
使用nodeJs來安裝less及編譯less文件為css文件的方法
這篇文章主要介紹了使用nodeJs來安裝less及編譯less文件為css文件的方法,在文章末尾給大家補充介紹了通過nodejs將less文件轉為css文件的方法,具體內容詳情大家通過本文學習吧2017-11-11Node.js原理阻塞和EventEmitter及其繼承的運用實戰(zhàn)
這篇文章主要介紹了Node.js原理阻塞和EventEmitter及其繼承的運用實戰(zhàn),文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08