NodeJS開發常見錯誤A&Q

zuoouu 8年前發布 | 32K 次閱讀 Node.js Node.js 開發

來自: http://giscafer.com/2016/02/05/nodejs-overflow-question/

0、NodeJS調試介紹

級別從高到低,推薦到不推薦:

  1. ttd/bdd測試驅動
  2. node-inspector,vsc編輯器,webstrom;
  3. node-debug
  4. console.log

    1、CookieParser錯誤

    throw new Error('cookieParser("secret") required for signed cookies');
    提示: Error: cookieParser(“secret”) required for signed cookies
app.use(cookieParser(config.auth_cookie_name));//這里cookieParser("secret")需要指定內容"secret"
//因為版本問題,這里坑里好一會
app.use(session({
  secret:config.session_secret,
  key: config.auth_cookie_name, //這里auth_cookie_name就是指定內容"secret"
  cookie: {maxAge: 1000 * 60 * 60 * 24 * 30},//30 days
  resave: false,
  saveUninitialized: true,
  store: new MongoStore({
    url: config.dev_dbUrl
  })
}));

</div>

出現以上問題可能是在代碼中使用類似 var auth_token = req.signedCookies[config.auth_cookie_name]; 代碼,如果沒用,以上直接使用 pp.use(cookieParser()); 即可。

參考解決:

http://stackoverflow.com/questions/20112876/cookieparser-and-cookiesession-middleware-in-expressjs

2、Cast to ObjectId failed for value

錯誤大致:

500 CastError: Cast to ObjectId failed for value "Mp0uah2G6TJVwPhOQ2sSZ10yklPkmbRV" at path "_id"
 at MongooseError.CastError (/home/bae/app/.bae/node_modules/mongoose/lib/error/cast.js:19:11)
 at ObjectId.cast (/home/bae/app/.bae/node_modules/mongoose/lib/schema/objectid.js:134:13)
 at ObjectId.castForQuery (/home/bae/app/.bae/node_modules/mongoose/lib/schema/objectid.js:173:17)
 at module.exports (/home/bae/app/.bae/node_modules/mongoose/lib/cast.js:205:32)
 at Query.cast (/home/bae/app/.bae/node_modules/mongoose/lib/query.js:2533:10)
 at Query.findOne (/home/bae/app/.bae/node_modules/mongoose/lib/query.js:1239:10)
 at Function.findOne (/home/bae/app/.bae/node_modules/mongoose/lib/model.js:1254:13)
 at Object.exports.getUserById (/home/bae/app/src/server/proxy/user.js:39:7)
 at exports.authUser (/home/bae/app/src/server/common/auth.js:114:19)
 at Layer.handle [as handle_request] (/home/bae/app/.bae/node_modules/express/lib/router/layer.js:95:5)
 at trim_prefix (/home/bae/app/.bae/node_modules/express/lib/router/index.js:312:13)
 at /home/bae/app/.bae/node_modules/express/lib/router/index.js:280:7
 at Function.process_params (/home/bae/app/.bae/node_modules/express/lib/router/index.js:330:12)
 at next (/home/bae/app/.bae/node_modules/express/lib/router/index.js:271:10)
 at /home/bae/app/.bae/node_modules/express-session/index.js:437:7
 at Command.callback (/home/bae/app/.bae/node_modules/connect-redis/lib/connect-redis.js:158:14)

這個問題可能和 1問題 有相關,如果不是,參考以下解決方案:

http://stackoverflow.com/questions/15771470/mongoose-cast-to-objectid-failed-for-value

http://stackoverflow.com/questions/25380388/error-casterror-cast-to-objectid-failed-for-value-at-path-id

3、model對象賦值不成功,需要創建字段。

目前通過schema創建字段解決。原因未知。

4、SyntaxError: Use of const in strict mode.

/home/bae/app/.bae/node_modules/connect-mongo/src/index.js:3
const Promise = require('bluebird');
^^^^^
SyntaxError: Use of const in strict mode.

5、Error: Can’t set headers after they are sent.

Can’t set headers after they are sent. => 不能發送headers因為已經發送過一次了 => 在處理HTTP請求時,服務器會先輸出響應頭,

然后再輸出主體內容,而一旦輸出過一次響應頭(比如執行過 res.writeHead() 或 res.write() 或 res.end() ),

你再嘗試通過 res.setHeader() 或 res.writeHead() 來設置響應頭時(有些方法比如 res.redirect() 會調用 res.writeHead() ),就會報這個錯誤。

(說明:express中的 res.header() 相當于 res.writeHead() ,res.send() 相當于 res.write() )

原因就是你程序有問題,重復作出響應,具體原因很多,需要自己根據以上的原則來排除。

解決: 在一個回調函數前邊應該加一個return

參考:

https://cnodejs.org/topic/53774ffecbcc396349ca1155

http://stackoverflow.com/questions/7042340/node-js-error-cant-set-headers-after-they-are-sent

6、Redis:ERR wrong number of arguments for ‘set’ command

Vue-order 部署BAE的時候遇到此Redis報錯問題,系統訪問就會報此錯誤 最后查出是因為connect-redis插件版本引起的;(該原因也可能是代碼引起)

7、express-session deprecated cookie should be available in req.headers.cookie

https://github.com/expressjs/session/issues/62

8、Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters

必須是24位16進制的字符,或者一個12字節的字符串

http://stackoverflow.com/questions/26453507/argument-passed-in-must-be-a-single-string-of-12-bytes

https://docs.mongodb.org/manual/reference/object-id/

</div>

 本文由用戶 zuoouu 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!