Javascript 使用Node.js连接到REST API
使用Node.js编写一个连接两个REST API的独立应用程序是否明智 一端是POS销售点系统 另一个将是托管的电子商务平台Javascript 使用Node.js连接到REST API,javascript,web-services,node.js,rest,underscore.js,Javascript,Web Services,Node.js,Rest,Underscore.js,使用Node.js编写一个连接两个REST API的独立应用程序是否明智 一端是POS销售点系统 另一个将是托管的电子商务平台 将有一个用于配置服务的最小接口。没别的了。当然。node.js API包含发出HTTP请求的方法: 我假设您正在编写的应用程序是一个web应用程序。您可能希望使用一个框架来删除一些繁重的工作(另请参见)。是的,Node.js非常适合调用外部API。然而,与Node中的所有内容一样,进行这些调用的函数都是基于事件的,这意味着要做一些事情,比如缓冲响应数据,而不是接
将有一个用于配置服务的最小接口。没别的了。当然。node.js API包含发出HTTP请求的方法:
我假设您正在编写的应用程序是一个web应用程序。您可能希望使用一个框架来删除一些繁重的工作(另请参见)。是的,Node.js非常适合调用外部API。然而,与Node中的所有内容一样,进行这些调用的函数都是基于事件的,这意味着要做一些事情,比如缓冲响应数据,而不是接收单个完成的响应 例如:
// get walking directions from central park to the empire state building
var http = require("http");
url = "http://maps.googleapis.com/maps/api/directions/json?origin=Central Park&destination=Empire State Building&sensor=false&mode=walking";
// get is a simple wrapper for request()
// which sets the http method to GET
var request = http.get(url, function (response) {
// data is streamed in chunks from the server
// so we have to handle the "data" event
var buffer = "",
data,
route;
response.on("data", function (chunk) {
buffer += chunk;
});
response.on("end", function (err) {
// finished transferring data
// dump the raw data
console.log(buffer);
console.log("\n");
data = JSON.parse(buffer);
route = data.routes[0];
// extract the distance and time
console.log("Walking Distance: " + route.legs[0].distance.text);
console.log("Time: " + route.legs[0].duration.text);
});
});
如果您要进行大量此类调用,找到一个简单的包装器库(或编写自己的包装器库)可能是有意义的。一个更简单、更有用的工具就是使用像Unirest这样的API;URest是NPM中的一个包,它太容易使用JU,比如
app.get('/any-route', function(req, res){
unirest.get("https://rest.url.to.consume/param1/paramN")
.header("Any-Key", "XXXXXXXXXXXXXXXXXX")
.header("Accept", "text/plain")
.end(function (result) {
res.render('name-of-the-page-according-to-your-engine', {
layout: 'some-layout-if-you-want',
markup: result.body.any-property,
});
})) 是的,没关系。我不明白为什么不能使用node.js实现这个目的。我非常喜欢node evented模型。当数据像这样分块时。是否可以在流结束之前开始操作它?它准时到达吗?谢谢!是,数据按顺序进行流式传输。如果您能够在流媒体完成之前使用数据,我不明白您为什么不能在此之前使用它(尽管我个人还没有它的用例)。“res”是未定义的!您必须将它放入
app.get('/',auth.protected,function(req,res){})中的路由中代码>
/*Below logics covered in below sample GET API
-DB connection created in class
-common function to execute the query
-logging through bunyan library*/
const { APIResponse} = require('./../commonFun/utils');
const createlog = require('./../lib/createlog');
var obj = new DB();
//Test API
routes.get('/testapi', (req, res) => {
res.status(201).json({ message: 'API microservices test' });
});
dbObj = new DB();
routes.get('/getStore', (req, res) => {
try {
//create DB instance
const store_id = req.body.storeID;
const promiseReturnwithResult = selectQueryData('tablename', whereField, dbObj.conn);
(promiseReturnwithResult).then((result) => {
APIResponse(200, 'Data fetched successfully', result).then((result) => {
res.send(result);
});
}).catch((err) => { console.log(err); throw err; })
} catch (err) {
console.log('Exception caught in getuser API', err);
const e = new Error();
if (err.errors && err.errors.length > 0) {
e.Error = 'Exception caught in getuser API';
e.message = err.errors[0].message;
e.code = 500;
res.status(404).send(APIResponse(e.code, e.message, e.Error));
createlog.writeErrorInLog(err);
}
}
});
//create connection
"use strict"
const mysql = require("mysql");
class DB {
constructor() {
this.conn = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'pass',
database: 'db_name'
});
}
connect() {
this.conn.connect(function (err) {
if (err) {
console.error("error connecting: " + err.stack);
return;
}
console.log("connected to DBB");
});
}
//End class
}
module.exports = DB
//queryTransaction.js File
selectQueryData= (table,where,db_conn)=>{
return new Promise(function(resolve,reject){
try{
db_conn.query(`SELECT * FROM ${table} WHERE id = ${where}`,function(err,result){
if(err){
reject(err);
}else{
resolve(result);
}
});
}catch(err){
console.log(err);
}
});
}
module.exports= {selectQueryData};
//utils.js file
APIResponse = async (status, msg, data = '',error=null) => {
try {
if (status) {
return { statusCode: status, message: msg, PayLoad: data,error:error }
}
} catch (err) {
console.log('Exception caught in getuser API', err);
}
}
module.exports={
logsSetting: {
name: "USER-API",
streams: [
{
level: 'error',
path: '' // log ERROR and above to a file
}
],
},APIResponse
}
//createlogs.js File
var bunyan = require('bunyan');
const dateFormat = require('dateformat');
const {logsSetting} = require('./../commonFun/utils');
module.exports.writeErrorInLog = (customError) => {
let logConfig = {...logsSetting};
console.log('reached in writeErrorInLog',customError)
const currentDate = dateFormat(new Date(), 'yyyy-mm-dd');
const path = logConfig.streams[0].path = `${__dirname}/../log/${currentDate}error.log`;
const log = bunyan.createLogger(logConfig);
log.error(customError);
}