Articles of rest

MongoDB-mongoose不响应REST API

我对MongoDB-mongoose有一个奇怪的问题,它不响应REST API mongoose版本 – 4.11.3 Mongo DB shell版本3.4.6我的电脑上的所有东西都是本地的 连接到Mongo DB如下: server.js var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test'); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function() { console.log("Connected correctly to db"); }); … var app = express(); var tasks = require('./server/routes/taskRouter'); app.use('/api/tasks',tasks); 日志“正确连接到数据库”被打印。 架构(tasks.js) var mongoose = require('mongoose'); var Schema = mongoose.Schema; var taskSchema = […]

GET请求的参数数组

例如:我们有以下操作: GET /employees 我必须具有允许使用多个名称作为参数进行筛选的function。 我代表它如下所示: GET /employees?empNames=xxx,yyy,zzz 但是,现在我没有一个名为empName的参数,而是我有两个参数empFirstName和empSurname。 其中将如下所示: GET /employees?empFirstName=xx&empSurname=x 但我仍然需要API来接受多个名称(empFirstName和empSurname)filter。 我可以看到几种方式来表示它: GET /employees?name=(xx,x),(yy,y),(zz,z) GET /employees?name=xx:x,yy:y,zz:z GET /employees?name=[{empFirstName=xx, empSurname=yy},{empFirstName=yy, empSurname=zz},{empFirstName=aa, empSurname=bb}] 什么可能是这种过滤最好的宁静表示。 有什么标准你需要在URI中使用分隔符:a,还是其他的? 什么是最简单和最好的方法来做到这一点?

如何实现Rest API,它支持使用nodejs和mongodb进行部分响应和嵌套查询

我一直想知道如何实现一个如Facebookgraphics,谷歌和LinkedIn部分响应如这里所述的api系统 Facebook的 GET /clients/007?fields=firstname,name 200 OK { "id":"007", "firstname":"James", "name":"Bond" } 谷歌 GET /clients/007?fields=firstname,name,address(street) <— nested query 200 OK { "id":"007", "firstname":"James", "name":"Bond", "address":{"street":"Horsen Ferry Road"} } 我看了一下facebook GraphQL库似乎提供了部分响应的解决scheme,但它似乎更复杂,难以实现 有没有任何nodejs库可以提供这样的界面权限pipe理来控制哪些用户可以访问哪些数据

如何限制我的restapi只能使用node.js的引用URL?

我在nodejs中有一个restAPI,并会限制只从特定的URL访问? 我的node.js代码: var express=require("express"); var app=express(); var auth = require('basic-auth'); appStart.use(function(req, res, next) { console.log(req.get('origin')); console.log(requestIp.getClientIp(req)); console.log(req.ip); //check the api key username e password var authentication=auth(req); if(authentication.name!="apiTokenUsername" || authentication.pass!="apiTokenPassword") res.status(400).send("Api key Username or password incorrect!"); //check if the ip of request is authorized if(req.ip=="xxx.xxx.xxx.xxx") return next(); //check if the origin of request is authorized if(req.get('origin') […]

承诺处理 – 更新数据库条目,如果存在

我坚持对Promises的新挑战。 目标:仅在P_KEY存在的情况下更新数据库条目。 当前的数据库是通过模块公开的,模块已经为db获取和放置方法。 双方都回诺言。 做法: API调用节点js上具有ID和值集的更新方法处理程序(json) 在post方法的处理程序中调用get db模块的方法检查promise成功的值是否为空,如果是则返回false否则为true。 如果属实; 数据存在调用db模块的方法。 但不知何故数据总是返回false。 即使db入口已通过db api。 /** Function to check if p_key exist*/ function checkIfPKExists(idVal) { pkdb.get(idVal).then(function(value) { if(value) { return true;} else { return false; } }, function(err) { console.log(err); return false; }) } /** UPDATE METHOD **/ var ch = checkIfPKExists("p_k"+req.body.id); if(!ch) { res.send("pk does not […]

节点js适合于批量更新

我在节点上写了一个脚本来与2个系统连接,并使用api将一堆更新应用到一个。 使用个别的例子更新工作正常,但是当把它们放在一起我得到一个超时错误。 由于节点的非阻塞性质而导致的猜测,即使用数千次更新来洪泛系统可能是问题。 我是否选错了使用的工具/引擎? 如果是的话,我的path是什么样的阻力最小(是否有其他的JavaScript环境,我可以重新使用我的代码?或者有没有办法设置某种深度的队列,以保持传出请求的数量没有响应较低)

我怎么能概括Node.js中的http响应处理程序?

我正在为节点应用程序编写一个rest api,并且我发现自己重写了如下的很多内容: function(req, res, next) { databaseCall() .then( (results) => { if (results != null) { res.status(200).send(results); } else { res.sendStatus(404); } }) .catch(function(err) { console.log("Request error: " + err.stack); res.sendStatus(500); }) } 我想重构响应部分,所以我可以做类似的事情 databaseCall() .then(handleResponse) handleResponse将负责整个响应/捕获过程。 但我不能完全弄清楚如何做到这一点。 databaseCall方法因端点而异 – 有时需要一个参数,有时不需要。 我可以做一个通用的函数expression式,将数据库调用的结果,并将其坚持在承诺链,但我不知道如何访问该函数内的响应对象。 我知道我可以添加另一个function来结合一切,如下所示: function(databaseCall, parameter, req, res, next) { databaseCall(parameter) .then( (results) => { if […]

数据传输对象(DTO)是否用Node.js / Express / MongoDB构buildREST API?

我是Node.js的新手,我是后端开发新手,所以这可能是一个愚蠢的问题。 比方说,我有这样的模型: var mongoose = require('mongoose'); var UserSchema = new mongoose.Schema({ name: String, birthDate: Date, email: String, profileImageUrl: String }); mongoose.model('User', UserSchema); module.exports = mongoose.model('User'); 我有一个userController函数来获取所有这样的用户: getUsers : function(req, res){ User.find({}, function (err, users) { if (err) return res.status(500).send("There was a problem finding the users."); res.status(200).send(users); }); }, 但是,假设我不想在我的列表中返回birthDate(好吧,我将使用投影),但是我想添加一些额外的属性,我要从其他文档中计算或填充,例如 – numberOfSentMessages,numberOfFollowers等 据我所知,这是一个.net开发人员将使用数据传输对象(DTO)或ViewModel,将有我想返回的属性的情况下,如下所示: UserDTO – name […]

如何创build一个使用Express.js创build一个REST风格的API与亚马逊Api Getaway和lambda

我一直在尝试使用亚马逊Getaway和Lambda服务来构buildNode.js / Express.js api。 到目前为止,我能够使用这个框架,平台组合,我需要知道的GET Web服务公开,我应该创build一个新的文件/代码zip捆绑每个服务,我要公开使用亚马逊API Getaway? 这个问题的原因是,我创build了一个包含所有path和方法的Express.js路由: route.get('/', function(res, req){ …. }) route.get('/:id', function(res, req){ …. }) route.get('/user/', function(res, req){ …. }) 使用Amazon Api Getaway我为每个lambda函数创build一个资源和一个方法,但是当我尝试向它发送path时,我得到的结果与Express.js应用程序只有1个可用path相同。 谢谢!

通过REST进行原生Kubeless调用

我想提交一个函数(通过HTTP触发器)从一个NodeJS进程kubeless,但我不想使用JavaScript等效 curl –data '{"term":"Albemarle"}' localhost:8080/api/v1/proxy/namespaces/default/services/bikesearch/ –header "Content-Type:application/json" 因为这需要我知道运行该function的服务的实际IP地址。 我希望能够通过知道函数的名称来访问kubeless api,从而给我提供了间接的级别 kubeless function call bikesearch –data '{"term":"Albemarle"}' 有无论如何通过节点访问上述(函数调用)API?