Node js文件执行

4

我有一个示例Node.js文件,我在命令提示符中执行了它,但是在浏览器中没有显示出来。

var http = require('http');
port = process.argv[2] || 8888;
http.createServer(function(request,response){
    response.writeHead(200, { 'Content-Type': 'text/html' });
var PI = Math.PI;
exports.area = function (r) {
    var res1 = PI * r * r;
    response.end(res1, 'utf-8');
   // alert(res1);
    return res1;
};
exports.circumference = function (r) {
    var res2 = 2 * PI * r;
    response.end(res2, 'utf-8');
    //alert(res2);
    return res2;
}; 
}).listen(parseInt(port, 10));
console.log("file server running at\n => hostname " + port + "/\nCTRL + C to shutdown");

加粗文字 请问有人能告诉我我的错误在哪里吗?


你在哪里调用 areacircumference 函数?为什么你的 Node 代码中有 alerts - Bergi
3个回答

2
问题是目前您没有向请求的响应中写任何内容。 response.write()
另外,您正在使用像 alert(); 这样的浏览器方法,但是您当前运行的代码是在服务器端执行的。
目前您只声明了方法,但没有调用任何内容。
这个示例应该可以工作:
var http = require('http');
port = process.argv[2] || 8888;


http.createServer(function(request, response) {
    response.writeHead(200, {
        'Content-Type': 'text/html'
    });

    var PI = Math.PI;
    area = function(r) {
        var res1 = PI * r * r;
        response.write('Area = ' + res1);
        // alert(res1);
        return res1;
    };
    circumference = function(r) {
        var res2 = 2 * PI * r;
        response.write('circumference = ' +res2);
        //alert(res2);
        return res2;
    };

    area(32);
    response.write(' ');
    circumference(23);
    response.end();

}).listen(parseInt(port, 10));
console.log("file server running at\n => hostname " + port + "/\nCTRL + C to shutdown");

有没有其他方法可以调用这些方法并在浏览器屏幕上显示结果? - user2724283
请查看 Express 获取更复杂的 Web 路由,或者阅读有关 http://nodejs.org/api/http.html#http_response_write_chunk_encoding 的更多信息。 - Risto Novik
是的,抱歉我的错误,现在可以工作了。https://dev59.com/xmkv5IYBdhLWcg3wnCHH - Risto Novik
关闭问题,这样其他用户就可以看到你的问题的答案了。 - Risto Novik
请告诉我如何关闭问题。 - user2724283

1

关于 alert 无法工作的评论,以下是您可以使用 Express 实现所需功能的方法:

var express = require('express');
var app = express();
app.configure(function(){
    // I'll let you read the express API docs linked below to decide what you want to include here
});

app.get('/area/:radius', function(req, res, next){
    var r = req.params.radius;
    res.send(200, { area: Math.PI * r * r });
});
app.get('/circumference/:radius', function(req, res, next){
    var r = req.params.radius;
    res.send(200, { circumference: 2 * Math.PI * r });
});
http.createServer(app).listen(8888, function(){
    console.log('Listening on port 8888');
});

假设您已在package.json中包含了 "express" 并使用 npm install 安装了它。这里是express API文档

0
问题在于您没有结束响应对象,因此您的请求一直在进行,最终失败。您需要结束响应对象(如果需要,可以附带一些数据)。
var http = require('http');
port = process.argv[2] || 8888;
http.createServer(function(request,response){
    var PI = Math.PI;
    exports.area = function (r) {
        var res1 = PI * r * r;
        alert(res1);
        return res1;
    };
    exports.circumference = function (r) {
        var res2 = 2 * PI * r;
        alert(res2);
        return res2;
    }; 
    response.end('hello');
}).listen(parseInt(port, 10));
console.log("file server running at\n => hostname " + port + "/\nCTRL + C to shutdown");

非常感谢你,Abhi,这个工作很好。有一个小问题,我在浏览器中没有收到任何警报消息,我该如何获得函数面积和周长的结果? - user2724283
1
你不能使用node来实现这个。正如其他地方所评论的那样,“alert”是一个客户端javascript方法 - 它在服务器上没有意义。如果你想要警报面积和周长,你实际上必须在这里调用它们并将值返回给客户端。此外,似乎你认为你可以从浏览器中调用面积和周长。你不行。至少,不发送http请求回服务器就不行。exports.area将面积方法公开给其他模块,这些模块需要require,但不公开给客户端代码。 - tandrewnichols

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接