Node JS:快速入门

时间:2014-02-03 23:15:41

标签: javascript node.js express

我是NodeJS和Express框架的新手。 使用Express的原因是它是最好的NodeJS Web框架之一。 这是我的问题:
 我有一个bitcoinTest.js,它在屏幕上打印一些结果。想要在网页上显示它。
bitcoinTest.js

var bitcoin = require('bitcoin');
var client = new bitcoin.Client({
  host: 'localhost',
  port: 8332,
  user: 'himanshuy',
  pass: 'xxxx'
});

  client.getDifficulty(function(err, difficulty) {
    if(err) {
       return console.error(err);
    }

    console.log('Difficuly: ' + difficulty);
  });

  client.getInfo(function(err, info) {
   if(err) return console.log(err);
   console.log('Info: ', info);
 });

server.js

var express = require('express');
var app = express();
app.listen(3000);

app.get('/', function(req, res){
   res.send('Hello World');
});

app.get('/getDifficulty', function(req, res){
   res.send('Get detail from BitcoinTest file');
});

app.get('/getInfo', function(req, res){
   res.send('Get detail from BitcoinTest file');
});

我如何实现最后两条路线并从bitcoinTest.js获取详细信息?

3 个答案:

答案 0 :(得分:3)

看起来你的问题不是Express,而是缺乏对Node的理解。首先,我将阅读有关Node模块的信息:

http://nodejs.org/api/modules.html

您可以使用自己编写的内容,只需导出bitcoin.Client对象并在应用文件中使用它,但除了使用之外,您实际上并没有做任何事情bitcoin.Client方法,为什么不把它全部放在你的app文件中?所以你的app文件会变成这样:

var http = require('http'),
    express = require('express'),
    bitcoin = require('bitcoin');

var app = express();

var client = new bitcoin.Client({
    host: 'localhost',
    port: 8332,
    user: 'himanshuy',
    pass: 'xxxx'
});

app.get('/', function(req, res){
   res.send('Hello World');
});

app.get('/getDifficulty', function(req, res){
    client.getDifficulty(function(err, difficulty) {
        if(err) {
            res.send('Bitcoin error: ' + err);
        } else {
            res.send('Difficulty: ' + difficulty);
        }
    });
}

app.get('/getInfo', function(req, res){
    client.getInfo(function(err, info) {
        if(err) {
            res.send('Bitcoin error: ' + err);
        } else {
            res.send('Info: ' + info);
    });    
});

http.createServer(app).listen(3000, function(){
   console.log('Server started on port 3000');
});

如果您开始添加更多比特币功能(不仅仅是调用bitcoin.Client)方法,那么创建模块是有意义的。你可以这样:

<强> LIB / bitcoin.js

var bitcoin = require('bitcoin');

module.exports = function(options){

    var client = new bitcoin.Client({
        host: options.host,
        port: options.port,
        user: options.user,
        pass: options.pass,
    });

    return {
        myMethod1: function(){
            // uses client and returns something useful
        },
        myMethod2: function(){
            // uses client and returns something useful
        }
    }

然后你可以像这样使用它:

var myBitcoin = require('./lib/bitcoin.js')({
    host: 'localhost',
    port: 8332,
    user: 'himanshuy',
    pass: 'xxxx'
});

// now you can use your custom methods
myBitcoin.myMethod1(/*whatever*/);

答案 1 :(得分:1)

目前我认为 bitcoinTest 作为一个单独的模块没有多大好处。 如果你想这样做,你必须为比特币程序做另外的包装,然后通过module.exports设置端点。

所以我的建议是单个 server.js

var bitcoin = require('bitcoin');
var client = new bitcoin.Client({ // use nconf to set parameters
    host: 'localhost',
    port: 8332,
    user: 'himanshuy',
    pass: 'xxxx'
});

app.get('/', function(req, res){
    res.send('Hello World');
});

app.get('/getDifficulty', function(req, res){
    client.getDifficulty(function(err, difficulty) {
        if(err) {
            res.send("ERROR");//log error
        } else {
            res.send(difficulty);
         }
    });
});

app.get('/getInfo', function(req, res){
    client.getInfo(function(err, info) {
        if(err) {
            res.send("ERROR");  //log error  
        } else {   
           res.send(info);
        }
    });
};

2注:

  1. 不设置具有硬编码值的客户端/数据库/等,使用nConf 用于设置数据的模块,如pass,name from config.json
  2. 使用例如winston模块提供的adv.logging。
  3. 希望你觉得它很有用

答案 2 :(得分:0)

var express = require('express');
var bitcoin = require('bitcoin');

var client = new bitcoin.Client({
  host: 'localhost',
  port: 8332,
  user: 'himanshuy',
  pass: 'xxxx'
});

var app = express();
app.listen(3000);

app.get('/', function(req, res){
   res.send('Hello World');
});

app.get('/getDifficulty', function(req, res){
        client.getDifficulty(function(err, difficulty) {
            if(err) {
                return console.error(err);
            }
            console.log('Difficuly: ' + difficulty);
            res.send(200 {'Difficuly: ' + difficulty});
        }
});

app.get('/getInfo', function(req, res){
    client.getInfo(function(err, info) {
            if(err) return console.log(err);
            console.log('Info: ', info);
            res.send(200, {'Info: ', info});
        }
});

另一位用户打败了我的答案,但他遗漏了明确的需求陈述,我的回答略有不同,所以...... 就像他说的那样,不需要有两个单独的文件。