javascript - 关于使用 Node.js 作为 Braintree 的本地服务器有疑问吗?

标签 javascript node.js http get braintree

我对 JavaScript 并不陌生,但对 Node.js 和后端语言很陌生。我有一个非常简单的问题。

我已经在计算机上安装并设置了 Node.js,并且正在尝试让服务器在我的静态文件和目录与浏览器之间运行,以便能够发送和接收请求。我下载了 Braintree 的免费沙盒(已找到 here )进行练习,以进行一些虚假交易,以便更好地了解其工作原理。

我通过在命令行上运行 npm install -g http-server 来设置本地服务器,然后运行 ​​http-server 来设置它。

然后我在命令行中收到以下消息:

Starting up http-server, serving ./public
Available on:
  http://127.0.0.1:8080
  http://10.0.1.4:8080
Hit CTRL-C to stop the server

因此,通过此设置...如果我想要执行 get()post() 方法并查看它在我的“服务器”和我的静态文件。我该怎么做呢?例如,如果我要设置 Braintree 的沙盒环境,然后使用 Braintree 网站上的以下代码创建 clientToken

const http = require('http'),
    url = require('url'),
    fs = require('fs'),
    express = require('express'),
    braintree = require('braintree');


const gateway = braintree.connect({
  environment: braintree.Environment.Sandbox,
  merchantId: "xxxxx", 
  publicKey: "xxxxx", 
  privateKey: "xxxxx" //blocked out real numbers for privacy
});

这是我为交易创建“客户端 token ”的剩余代码...和 ​​here是我通过 Braintree 网站遵循的指南...

http.createServer((req,res) => {
  gateway.clientToken.generate({
  },(err, response) => {
    if(err){
      throw new Error(err);
    }
    if(response.success){
      var clientToken = response.clientToken 
      res.writeHead(200, {'Content-Type': 'text/html'}); 
      res.write(clientToken);
      res.end("<p>This is the end</p>");
    } else {
      res.writeHead(500, {'Content-Type': 'text/html'});
      res.end('Whoops! Something went wrong.');
    }
  });
}).listen(8080,'127.0.0.1');

所以,我的问题是...如果我想使用 get() 方法生成发送 token 给客户端...我该怎么做?它必须是一个单独的js文件吗?它们将如何联系起来?如果他们在同一个目录中,他们会看到对方吗?

以下是 Braintree 网站上有关如何发送客户端 token 的示例:

app.get("/client_token", function (req, res) {
  gateway.clientToken.generate({}, function (err, response) {
    res.send(response.clientToken);
  });
});

如何将其集成到我当前的代码中并实际工作?如果这些是基本问题,我很抱歉,但我想对此有更好的理解。预先非常感谢!

最佳答案

我对 Braintree 不太了解,但通常你会使用像express.js这样的东西来处理这样的东西。因此,我将通过我拥有的应用程序为您提供一些简单示例。

#!/usr/bin/env node

var http = require('http');
var app = require('../server.js');
var models = require("../models");

models.sync(function () {
    var server = http.createServer(app);
    server.listen(4242, function(){
        console.log(4242);
    });
});

这就是启动一切的文件。不用担心模型,它只是同步数据库。

var express = require('express');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var app = express();

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
// share public folder
app.use(express.static(path.join(__dirname, 'public')));

require('./router.js')(app);

module.exports = app;

接下来是将所有内容连接在一起的 server.js。 app.use() 行用于添加中间件和 app.use(logger('dev'));设置您要查找的路线记录器。

app.use(express.static(path.join(__dirname, 'public')));共享公共(public)目录中的所有文件,这就是您要寻找的静态文件

var path = require('path');

module.exports = function(app){
    //catch
	app.get('*', function(req, res){
        res.sendFile(path.join(__dirname, '..', 'public', 'index.html'));
    });
}

最后一 block 是router.js。这是您放置所有获取和发布路线的地方。一般来说,我发现如果你在示例中看到 app.get 或 app.post ,那里谈论的是 express 的东西。它经常与 Node 一起使用,并且使路由方式更容易。

此外,如果您使用 token ,路线将如下所示。

app.get('/print', checkToken, function(req, res){
  print.getPrinters(function(err, result){
    response(err, result, req, res);
  });
});

function checkToken(req, res, next){
  models.Tokens.findOne({value: req.headers.token}, function(err, result){
    if(err){
      res.status(500).send(err);
    }else if(result == null){
      console.log(req.headers);
      res.status(401).send('unauthorized');
    }else{
      next();
    }
  });
}

因此,您想确保任何路线都有一个 token ,您只需将该函数传递给它即可。同样,模型适用于数据库

关于javascript - 关于使用 Node.js 作为 Braintree 的本地服务器有疑问吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42546537/

相关文章:

javascript - jQuery 选择除一个 ID 之外的所有类

javascript - JS WebSocket 无法连接到运行 Node.js 'ws' 包的 AWS EC2 实例

javascript - 服务端渲染如何使用跨域cookie?

angularjs - 在 AngularJS 中转换请求和响应

http - '?' versus ' #!'在网址中

javascript - 从 Meteor 中的集合文档返回单个值

javascript - 将类更改为可编辑的表格单元格

node.js - 无法连接到 Amazon EC2 上的 Node 服务器

node.js - Firebase 查询快照未定义

c# - 如何在带有 SSL 的 C# 中使用 HTTP GET 请求? (违反协议(protocol))