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的數(shù)據(jù)庫模塊中,運行后報錯
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
前提
在node中,res.send()是不能被同時調用兩次及以上的,也正好印證了報錯信息中所說的 Cannot set headers
情景
在用戶注冊接口中,邏輯為:
- 首先判斷用戶填寫的用戶名是否被占用
- 如果沒有被占用,再將該用戶信息插入到用戶表中
以上邏輯需要用到兩次數(shù)據(jù)庫操作,即db.query()
最開始我想當然的把兩次數(shù)據(jù)庫操作并列書寫,結果就報錯了。
原因
實際上這里涉及到數(shù)據(jù)庫操作異步的問題。
據(jù)我推測,db.query()是異步的,也就是說兩次數(shù)據(jù)庫操作可能會同時發(fā)生,也就意味著可能同時發(fā)生兩次res.send()操作,從而出現(xiàn)錯誤。
解決
知道上述原因之后就好解決了,直接把第二次db.query()放到第一次db.query()的處理函數(shù)中。
代碼
// 用戶注冊
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)
// 判斷影響行數(shù)是否為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‘)解決方案
相關文章
詳解node單線程實現(xiàn)高并發(fā)原理與node異步I/O
本篇文章主要介紹了node單線程實現(xiàn)高并發(fā)原理與node異步I/O ,具有一定的參考價值,有興趣的可以了解一下2017-09-09
NodeJS模塊與ES6模塊系統(tǒng)語法及注意點詳解
這篇文章主要給大家介紹了關于NodeJS模塊與ES6模塊系統(tǒng)語法及注意點的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-01-01
node.js中的events.emitter.removeAllListeners方法使用說明
這篇文章主要介紹了node.js中的events.emitter.removeAllListeners方法使用說明,本文介紹了events.emitter.removeAllListeners 的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下2014-12-12
node+koa實現(xiàn)數(shù)據(jù)mock接口的方法
本篇文章主要介紹了node+koa實現(xiàn)數(shù)據(jù)mock接口的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
nodejs+express實現(xiàn)文件上傳下載管理網站
這篇文章主要為大家詳細介紹了nodejs+express實現(xiàn)文件上傳下載管理的網站,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03

