Node.js報(bào)錯(cuò)信息Error:?Cannot?find?module?'XXX'問題及解決
Node.js報(bào)錯(cuò)信息Error: Cannot find module 'XXX'
在桌面新建一個(gè)記事本里面寫上我們熟悉的HelloWord保存為后綴為js
我寫的只是個(gè)HelloWord而已,不涉及到任何包管理工具,所以也別去折騰什么NPM了,這個(gè)錯(cuò)誤只是單純的找不到文件。
簡單的解決辦法
在桌面空白處摁著Shift鍵不放鼠標(biāo)右鍵,選中在此處打開命令窗口然后再編妥妥的,或者在DOS界面鍵入路徑。
心得:其實(shí)就是個(gè)路徑的問題啦~
Nodejs運(yùn)行后報(bào)錯(cuò)Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
問題
在node的數(shù)據(jù)庫模塊中,運(yùn)行后報(bào)錯(cuò)
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
前提
在node中,res.send()是不能被同時(shí)調(diào)用兩次及以上的,也正好印證了報(bào)錯(cuò)信息中所說的 Cannot set headers
情景
在用戶注冊接口中,邏輯為:
- 首先判斷用戶填寫的用戶名是否被占用
- 如果沒有被占用,再將該用戶信息插入到用戶表中
以上邏輯需要用到兩次數(shù)據(jù)庫操作,即db.query()
最開始我想當(dāng)然的把兩次數(shù)據(jù)庫操作并列書寫,結(jié)果就報(bào)錯(cuò)了。
原因
實(shí)際上這里涉及到數(shù)據(jù)庫操作異步的問題。
據(jù)我推測,db.query()是異步的,也就是說兩次數(shù)據(jù)庫操作可能會同時(shí)發(fā)生,也就意味著可能同時(shí)發(fā)生兩次res.send()操作,從而出現(xiàn)錯(cuò)誤。
解決
知道上述原因之后就好解決了,直接把第二次db.query()放到第一次db.query()的處理函數(shù)中。
代碼
// 用戶注冊 exports.userRegister = (req, res) => { const userinfo = req.body // 1.判斷是否合法 (已經(jīng)采用第三方包來進(jìn)行驗(yàn)證,不用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('用戶名已被占用,請更換其他用戶名!') } /** * 注意這里存在一個(gè)異步的問題。如果兩個(gè)db.query()并行寫,就會存在兩次res.send同時(shí)發(fā)送的情況。 * 所以要避免,就把第二個(gè)db.query放在第一個(gè)db.query里面 */ // 3.調(diào)用bcrypt.hashSync對用戶密碼進(jìn)行加密 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) // 判斷影響行數(shù)是否為1 if (results.affectedRows !== 1) return res.cc('注冊用戶失敗,請稍后再試') // 用戶注冊成功 return res.send({ status: 0, msg: '注冊成功!' }) }) }) }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- js控制臺報(bào)錯(cuò)Uncaught TypeError: Cannot read properties of undefined (reading ‘a(chǎn)ppendChild‘)的解決
- node.js報(bào)錯(cuò):Cannot find module ''ejs''的解決辦法
- JavaScript報(bào)錯(cuò):Uncaught TypeError: Cannot set property ‘X‘ of undefine的解決方案
- 關(guān)于js復(fù)制內(nèi)容到瀏覽器剪貼板報(bào)錯(cuò):Cannot read properties of undefined (reading ‘writeText‘)的解決方案
- vue項(xiàng)目啟動后,js-base64依賴報(bào)錯(cuò)Cannot read properties of null(reading ‘replace’)問題
- JavaScript中報(bào)錯(cuò)Cannot?set?properties?of?undefined?(setting?‘1‘)解決方案
相關(guān)文章
node+express+jade制作簡單網(wǎng)站指南
上文我們介紹了使用node+express+ejs制作頁面,今天我們來看看使用node+express+jade制作簡單網(wǎng)站,本文記錄了一下整個(gè)搭建過程,給需要的小伙伴們參考下吧2014-11-11詳解HTTPS 的原理和 NodeJS 的實(shí)現(xiàn)
這篇文章主要介紹了詳解HTTPS 的原理和 NodeJS 的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07Nodejs回調(diào)加超時(shí)限制兩種實(shí)現(xiàn)方法
這篇文章主要介紹了Nodejs回調(diào)加超時(shí)限制兩種實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2017-06-06node事件循環(huán)和process模塊實(shí)例分析
這篇文章主要介紹了node事件循環(huán)和process模塊,結(jié)合實(shí)例形式分析了node事件循環(huán)和process模塊具體功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-02-02利用yarn實(shí)現(xiàn)一個(gè)webpack+react種子
其實(shí)以前就寫過如何使用React-router和Webpack快速構(gòu)建一個(gè)react程序。后來發(fā)現(xiàn)版本太老,于是乎最近又重新組織了下結(jié)構(gòu),使用最近發(fā)布的yarn作為包管理工具,介紹下基本安裝步驟,有需要的朋友們下面來一起看看吧。2016-10-10nodejs實(shí)現(xiàn)郵箱發(fā)送驗(yàn)證碼功能
開發(fā)個(gè)人網(wǎng)站時(shí),注冊頁面可以使用郵箱驗(yàn)證,于是記錄一下如何用nodejs/express服務(wù)器實(shí)現(xiàn)郵箱發(fā)送驗(yàn)證碼,不僅可以在郵箱注冊時(shí)使用,還可以拓展用于各種安全驗(yàn)證,本文給大家介紹了使用nodejs實(shí)現(xiàn)郵箱發(fā)送驗(yàn)證碼功能,需要的朋友可以參考下2024-07-07使用nodeJs來安裝less及編譯less文件為css文件的方法
這篇文章主要介紹了使用nodeJs來安裝less及編譯less文件為css文件的方法,在文章末尾給大家補(bǔ)充介紹了通過nodejs將less文件轉(zhuǎn)為css文件的方法,具體內(nèi)容詳情大家通過本文學(xué)習(xí)吧2017-11-11Node.js原理阻塞和EventEmitter及其繼承的運(yùn)用實(shí)戰(zhàn)
這篇文章主要介紹了Node.js原理阻塞和EventEmitter及其繼承的運(yùn)用實(shí)戰(zhàn),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08node.JS md5加密中文與php結(jié)果不一致的解決方法
本篇文章主要介紹了node.JS md5加密中文與php結(jié)果不一致的解決方法,具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-05-05