繁体   English   中英

对JavaScript / nodejs中的``使用严格''感到困惑

[英]Confused about 'use strict' in JavaScript/nodejs

当我在代码中添加一个linter时,我注意到关于'use strict';的很多错误'use strict'; 所以我将这一行添加到很多文件中。 但是,这在我的主要app.js文件中破坏了一些代码,如下所示:

'use strict';

var express = require('express');
var timeout = require('connect-timeout');
//var logger = require('morgan');
var requireDir = require('require-dir');
var app = express();

// Load all the routes in the routes file into app middleware
// This assumes that the route exports an express.Router() object
var routes = requireDir('./routes');
for (var i in routes) app.use('/', routes[i]);


// Set the timeout
app.use(timeout('5s'));

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = 'ERROR: Invalid request to the server';
  err.status = 404;
  next(err);
});

if (!module.parent) {
  app.listen(3000);
  console.log('engine-map-service opend on port 3000');
}

它返回以下error堆栈:

  TypeError: Cannot assign to read only property 'status' of ERROR: Invalid request to the server
     at /usr/src/app/app.js:21:14
     at Layer.handle [as handle_request] (/usr/src/app/node_modules/express/lib/router/layer.js:95:5)
     at trim_prefix (/usr/src/app/node_modules/express/lib/router/index.js:312:13)
     at /usr/src/app/node_modules/express/lib/router/index.js:280:7
     at Function.process_params (/usr/src/app/node_modules/express/lib/router/index.js:330:12)
     at next (/usr/src/app/node_modules/express/lib/router/index.js:271:10)
     at /usr/src/app/node_modules/connect-timeout/index.js:64:5
     at Layer.handle [as handle_request] (/usr/src/app/node_modules/express/lib/router/layer.js:95:5)
     at trim_prefix (/usr/src/app/node_modules/express/lib/router/index.js:312:13)
     at /usr/src/app/node_modules/express/lib/router/index.js:280:7 

use strict到底是什么? 我已经阅读了几篇文章,但是关于如何改变开发人员的行为以及何时应该或不应该使用它,我没有深入了解。 我发现有不止一篇文章建议use strict开始每个js文件,但显然有些情况我不见了。

在Java中,“严格使用”的用途广泛涉及use strict的用法, 其背后的原因是什么?

在您的特定情况下,它捕获的TypeError除非在运行时发生某种条件,否则否则不会抛出该错误。

在错误处理程序中,您将创建一个名为err的字符串,然后尝试为其分配属性。 您不能将属性分配给字符串。

如果要创建同时包含消息和状态的错误对象,则可以执行以下操作:

app.use(function(req, res, next) {
  var err = {
    message: 'ERROR: Invalid request to the server',
    status: 404
  };
  next(err);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM