'需要'在定义之前使用过

时间:2015-01-08 15:54:46

标签: javascript node.js

我开始研究Node.js.我购买了Marc Wandscheider编写的手册。 我下载了使用它的工具,我也下载了Brackets。

我正在尝试一个示例脚本,但是我得到两个不理解的错误,并且指南中没有这些错误。

第一个错误告诉我:

  

'require'在定义之前使用

C:\node> node debug web.js
<Debugger listening on port 5858>
connecting ... ok
break in C:\node\web.js: 1
   1 var http = require ("http");
   2
   3 process_request function (req, res) {
debug>

而第二个(在Brackets中):

  

缺少使用严格声明

我在互联网上看到我可以添加行

"use strict";

但指南没有使用它 - 是否需要?

如何解决这些问题?

整个代码

var http = require("http");

function process_request(req, res) {

    var body = 'Thanks for calling!';
    var content_length = body.length;
        res.writeHead(200, {
            'Content-Length': content_length,
            'Content-Type': 'text/plain'
        });
    res.end(body);
}

var s = http.createServer(process_request);
s.listen(8080);

2 个答案:

答案 0 :(得分:6)

这些错误实际上是JSHINT流程验证优秀代码的建议。 Brackets可能正在幕后使用它。 如果您告诉jshint您正在为节点编写,那么 require 将成为全局变量,因此它不会给出该错误。 尝试运行此代码,并在JSHINT某些文章中添加一些警告on using JSHINT

/*jshint node:true */
'use strict';
var http = require('http');

function process_request(req, res) {

    var body = 'Thanks for calling!';
    var content_length = body.length;
        res.writeHead(200, {
            'Content-Length': content_length,
            'Content-Type': 'text/plain'
        });
    res.end(body);
}

var s = http.createServer(process_request);
s.listen(8080);

答案 1 :(得分:2)

我在编写gulp文件时遇到了来自Brackets的JSLint窗口的类似警告。这就是我解决它们的方法:

Problems × 1 'require' was used before it was defined.

require函数在别处定义,特别是作为Node.js的一部分定义,因此要解决警告,请在JavaScript文件的顶部将其标记为全局:

/* global require */

请参阅http://jslinterrors.com/a-was-used-before-it-was-defined

Missing 'use strict' statement

我通过使用立即调用的函数表达式解决了这个问题:

(function () {
    "use strict";

    // The rest of the code
}());

请参阅http://jslinterrors.com/move-the-invocation-into-the-parens-that-contain-the-function

Combine this with the previous 'var' statement

这个很简单。而不是

var body = 'Thanks for calling!';
var content_length = body.length;

使用

var body = 'Thanks for calling!',
    content_length = body.length;