具有多个文件的简单nodejs示例

时间:2017-05-30 04:49:27

标签: node.js

我在NodeJS上写了一个非常简单的项目。我想与其他语言编程示例相似,例如java。所以我制作:server.js,main.js和module(calc.js)。这是他们的代码:

文件server.js

var main = require('./main');

var http = require('http');
http.createServer(function(req, res){
    main.main(req, res);
}).listen(8080, '127.0.0.1');
console.log('Server running at http://127.0.0.1:8080/');

档案main.js

var calc = require('./calc');

exports.main = function(req, res){
    var a = 5;
    var b = 9;
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end(calc.Plus(a,b));
    res.end(calc.Minus(a,b));
};

文件calc.js

(function(){
    module.exports.Plus = function(a, b){
        return a+b;
    };

    module.exports.Minus = function(a, b){
        return a-b;
    };
}());

我在我的服务器上运行它,我收到一个错误:

  

http://127.0.0.1:8080/运行的服务器   _http_outgoing.js:558       抛出新的TypeError('第一个参数必须是字符串或缓冲区');       ^

     

TypeError:第一个参数必须是字符串或缓冲区       在ServerResponse.OutgoingMessage.end(_http_outgoing.js:558:11)       在Object.exports.main(D:\ workspace \ FirstNodeJS \ main.js:7:6)       在服务器上。 (d:\工作空间\ FirstNodeJS \ server.js:5:7)       在emitTwo(events.js:106:13)       在Server.emit(events.js:191:7)       在HTTPParser.parserOnIncoming [as onIncoming](_http_server.js:546:12)       在HTTPParser.parserOnHeadersComplete(_http_common.js:99:23)

我只是NodeJS的新手。

2 个答案:

答案 0 :(得分:2)

res.end()期望第一个参数是字符串或缓冲区。你正在传递一个号码。这就是文档here中描述的方式。

你可以这样做:

res.end(calc.Plus(a,b).toString());

此外,您只能针对特定回复致电res.end()一次。如果您想在响应中发送多个内容,可以在使用res.end()之前将它们全部合并为一个字符串,也可以多次调用res.write(),然后使用res.end()完成

答案 1 :(得分:1)

您的问题有两个问题。

第一个问题是来自NodeJS的响应对象的`.write(...)API接受字符串缓冲区或字符串。

<强>引用:

  

response.write(chunk [,encoding] [,callback])

     

chunk&lt; 字符串&gt; | &LT; 缓冲区&gt;

     

编码

     

回调返回:

请参阅: https://nodejs.org/api/http.html#http_response_write_chunk_encoding_callback

您的计算方法PlusMinus正在返回整数。因此,您需要在写入之前将Numbers转换为String;

示例:

var calc = require('./calc');

exports.main = function(req, res){
    var a = 5;
    var b = 9;
    res.writeHead(200, {'Content-Type': 'text/plain'});
    var result = calc.Plus(a,b);
    res.write(result.toString());
    res.write("\n");
    result = calc.Minus(a,b);
    res.write(result.toString());
    res.end();
};

另外,问题2是你应该只为每个响应对象调用.end(...)一次。

您应该构建结果然后调用它。或者根据需要多次致电.write(...),当您满意时,请致电.end(...)来关闭通讯。

另外,您可能希望将结果换行\n,以便输出看起来像;

enter image description here

如果不是,它将是一个班轮,14-4