Node.js/Express Tips
Node.js/Express知识点积累
Node.js
-
__dirname和process.cwd()的区别。
- __dirname指向正在执行的脚本模块所在的目录。(模块所在目录,D:\Dev\project\server\utils)
- process.cwd()方法返回Node.js进程的当前工作目录。(app.js所在目录,D:\Dev\project\server)
-
npm install --save express。--save的作用。
--save选项会更新package.json文件 -
http默认端口号80,https是默认端口号443,一般端口号要1023< port <65535。
-
获取客户端IP地址。
Express中req.connection.remoteAddress结果格式为"::ffff:10.79.101.62", 如果只想获得ipv4地址,可以在app.lister中添加"0.0.0.0"参数的方式解决。var getClientIP = function (req) { return req.headers['x-forwarded-for'] || req.connection.remoteAddress || req.socket.remoteAddress || (req.connection.socket ? req.connection.socket.remoteAddress : null); }app.listen(3006, "0.0.0.0", function (err) { if (err) { util.logger.error(err); } else { util.logger.info("App listening on port 3006"); } }); -
获取启动命令行参数。
所有命令行参数都可以通过process.argv遍历访问。
- 第一个参数为node命令目录(D:\Program Files\nodejs\node.exe)
- 第二个参数为主应用程序目录(D:\Dev\WorkSpace\project\wifi\server.js)
var argv = process.argv; var argvMap = {}; argv.forEach(function (v, index) { var vs = v.split("="); if (vs.length === 2) { argvMap[vs[0].trim()] = vs[1].trim(); } }); -
捕获&处理应用异常。
这里的异常指的应用级别的异常,比如读文件异常导致应用自动exit,一般写入系统日志,方便查询。
在process上添加uncaughtException的异常监听。
process.on('uncaughtException', function (err) { logger.error("[Inside 'uncaughtException' event] " + err.stack || err.message); });
Express
-
如何指定favicon.ico路径。
app.use('/favicon.ico', express.static('server/favicon.ico')); -
在express.Router中是否可以像在应用一样使用其它router路由模块。
经测试不可以(Express v4.16.2)。 -
Express中如何添加404处理。
在Express中,404响应不是错误,所以错误处理程序中间件不会捕获它们,404表示Express已经执行了所有的中间件功能和路由,发现它们都没有响应。
可以通过在堆栈底部,在所有其他函数下面(app.listen之前)添加一个中间件函数,来处理一个404响应
app.use( function (req, res, next) { util.logger.error("未发现:" + req.url); if (util.http.isAjaxRequest(req)) { util.ajax.fail(req, res, "未发现" + req.url); } else { res.redirect("/"); //res.status(404).send("未发现:" + req.url) } }); -
Express中如何设置静态文件(JS/CSS)是否使用浏览器缓存。
通过设置静态文件的maxAge实现。
app.use('/libs', express.static('client/libs/', { maxAge: 86400000//cache static files })); -
express-session中如何将不用app应用的session分开。
如果有多个应用程序在同一主机名上运行(这只是名称,即localhost或127.0.0.1;不同的方案和端口没有命名不同的主机名),那么您需要将会话cookie彼此分开。
最简单的方法是简单地为每个应用程序设置不同的名称。
app1.use(session({ name:"sid1" })); app2.use(session({ name:"sid2" })); -
解决bodyParser.json中数据过大引起的"request entity too large"问题
通过limit控制最大请求体大小。 如果这是一个数字,则该值指定字节数; 如果是字符串,则将值传递给字节库以进行解析。 默认为'100kb'。
app.use(bodyParser.json({limit: '50mb'}));