具有多个文件的简单nodejs示例
我在NodeJS上编写了非常简单的项目。我想与其他语言编程示例(如java)相似。所以我做:server.js,main.js和模块(calc.js)。以下是他们的代码:具有多个文件的简单nodejs示例
文件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;
};
}());
我在我的服务器上运行它,我得到了一个错误:
Server running at http://127.0.0.1:8080/ _http_outgoing.js:558 throw new TypeError('First argument must be a string or Buffer'); ^
TypeError: First argument must be a string or Buffer at ServerResponse.OutgoingMessage.end (_http_outgoing.js:558:11) at Object.exports.main (D:\workspace\FirstNodeJS\main.js:7:6) at Server. (D:\workspace\FirstNodeJS\server.js:5:7) at emitTwo (events.js:106:13) at Server.emit (events.js:191:7) at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:546:12) at HTTPParser.parserOnHeadersComplete (_http_common.js:99:23)
我只是一个新手的NodeJS。
有2个问题到您的问题。
第一个问题是NodeJS响应对象的`.write(...)API需要一个字符串缓冲区或字符串。
报价:
response.write(chunk[, encoding][, callback])
chunk < string > | < Buffer >
encoding
callback Returns:
参见:https://nodejs.org/api/http.html#http_response_write_chunk_encoding_callback
你的计算方法Plus
和Minus
正在返回整数。因此,您需要在写入之前将数字转换为字符串;
实施例:
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
你的结果,使输出看起来像;
如果没有这将是一个衬垫,14-4
。
res.end()
期望第一个参数是字符串或缓冲区。你正在传递一个数字。这是如何在文档here中描述的。
你可以这样做:
res.end(calc.Plus(a,b).toString());
此外,您可以只在一定的响应呼吁res.end()
一次。如果您想要将多件事情作为响应的一部分发送,可以在使用res.end()
之前将它们全部组合成一个字符串,或者可以多次拨打res.write()
,然后用res.end()
完成。
你能告诉我你用于dev nodejs的工具吗? (在你的截图中) –
@TerryJohn那是邮递员。请参阅:https://www.getpostman.com/ –