gpt4 book ai didi

javascript - 对 JavaScript/nodejs 中的 'use strict' 感到困惑

转载 作者:行者123 更新时间:2023-12-02 15:37:10 25 4
gpt4 key购买 nike

当我向代码中添加 linter 时,我注意到出现了很多关于 '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');
}

返回以下错误堆栈:

  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 文件,但显然有些情况我遗漏了。

最佳答案

What does "use strict" do in JavaScript, and what is the reasoning behind it? 中广泛介绍了 use strict 的使用。

在您的具体情况下,它正在捕获一个 TypeError ,否则在运行时发生特定条件之前不会抛出该错误。

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

如果您想创建一个包含消息和状态的错误对象,您可以执行以下操作:

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

关于javascript - 对 JavaScript/nodejs 中的 'use strict' 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32848468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com