我正在用Node.js,Express和MySql开发一个RESTful API 。 没有使用ORM。 为了处理资源请求,我想尽可能地重用代码。 我要实现一个callback工厂 ,我想听取您的意见。 api.js 这是主要的应用程序文件。 'use strict'; var http = require('http'), express = require('express'), app = express(), env = app.get('env'), config = require('./config')[env], pool = require('./pool')(config.database), /* node-mysql pool */ people = require('./routes/people')(pool); /* route handlers for people resource */ app.use(express.json()); app.use(express.urlencoded()); app.use(app.router); app.get('/people', people.findAll); /* middleware handling request for the […]
从这个回答https://stackoverflow.com/a/1695287/256400 ,我觉得需要multipart / form-data从浏览器上传文件到服务器。 但是,如果我的用例是上传文件从服务器到服务器不应该工作,如果我把内容types作为application / octet-stream甚至特定的types,如图像/ PNG 我在node.js服务器上试验了这个,并使用fs.readFile来获取文件内容,并使用REST库来执行HTTP POST。 但是我对读取文件时使用的编码有点困惑。 被默认的fs.readFile返回Buffer对象。 我试图使用二进制文件但在这里的文档说,它的二进制被弃用,有利于缓冲区对象。 在这里读取文件的内容和上传的正确方法是什么? 这可以做到没有多部分/forms的数据
这个问题不容易用英文解释,因为我不是。 那么这很简单,我尝试做一个REST API,我可以有这些URI: get / events / 10 / users / 2 get / users / 2 / events / 10 正如你所看到的,我可以检索一个在事件中注册的用户,我可以检索一个链接到用户的事件。 这只是一个例子。 我现在的问题是如何用良好的逻辑来实现? 使用哪个控制器? 用户或事件控制器? 因为REST,我有这样的资源组合,肯定是/ user?id = 2&event = 10和/ events?id = 10&user = 2更容易理解,我知道在哪里检索用户和事件。
我正在运行一个基于Web的JavaScript客户端的node.js后端发送AJAX请求。 现在,我想使用纯Javascript,即Google的V8做一个小型桌面版的JavaScript客户端。 在这种情况下,我怎样才能启用对桌面版本的AJAX支持,因为没有窗口/文档对象? 在一个完美的世界中,Web和桌面版本将共享相同的代码? 或者我需要在js代码之外编写AJAX或REST API,即作为本机代码并从js中调用它?
我正在开发一个节点API。 我有像GET /messages端点 这将返回所有的消息。 我想要在这个端点上分页 GET /messages?filter=my_filter_string&limit=10&offset=10 filter语句将是这样的 {fieldName1}={fieldValue1}&…{fieldNameN}>{fieldValueN}. Operations can be =, > or <. < and > operations are only for number, integers and dates 我使用sequelize作为ORM和postgresql作为数据库。 我的问题是如何parsingmy_filter_statement并将其转换为sequelize的search条件对象。 另外,如果我打电话给API GET /messages?filter="id=10&contentlength>20"&limit=10&offset=10 它不工作
我正在用node.js工作其余的api。 我在/注册端点中创build了jwt-token。 然后发送这个令牌每个iOS应用程序,Windows Phone应用程序请求Authoriziton头。 所以API试图find包含这个令牌的用户。 如果它已经返回响应。 我担心安全。 每个人都将监控创build用户的API地址,并获取令牌,然后使用此令牌的所有端点。 所以会发布数据到其他模式和应用程序无用数字,死亡。 如何防止这种情况? 本机iOS,Windows Phone应用程序和用于此API的网站。 处理安全性和用户pipe理的最好方式有点像跨平台应用程序的API? 这个结构是否有很好的文档? 有用户scheme。 var userSchema = mongoose.Schema({ token:String, favorites:[favorites], local : { username:String, email: String, password: String, sex:Number }, facebook: { id:String, token:String, email:String, name:String }, lists:[{listid:String,insertdate:Date}] }); 每个端点控制这样的授权 function ensureAuthorized(req, res, next) { var bearerToken; console.log(req.headers); var bearerHeader = req.headers["authorization"]; if (typeof […]
我实际上build立一个基于RESTFul API node.js,我面临一个问题。 域代码是写的,我现在试图pipe理这个应用程序的访问权限,我不知道如何处理。 实际上,我需要允许/限制用户的资源访问权限。 其实,我想过把这些权限存储在用户的数组中,像这样: { userName:"foo", userMail:"foo@bar.com", userApiRightsAllowed:[ { uri:"/site/1594656", verb:"post", }, { uri:"/sites", verb:"get", } ] } 在自定义中间件中,我检查用户权限是否包含req.url和req.verb。 如果没关系,他可以访问资源。 在另一个案例中,他得到了一个“禁止”403。 问题 问题是当我需要/网站。 我授权用户访问/网站,但他没有访问权限来查看站点详细信息,如/ sites / 65982。 但在我的网站列表中,他会看到所有网站和/网站/ 65982。 题 什么是以最小的粒度pipe理API访问权限的最佳方式:资源和方法? 我怎么能使我的代码工作,而且用户只能看到他能够看到的网站? 编辑:我正在使用MongoDb数据库 提前致谢
我正在创build一个动物数据库。 对于我存储在我的数据库信息中的每个产品,如下所示: { "_id": ObjectId("55489125dadf65e30969d6d3"), "codAnimal": "100001", "animalData": { "EN": { "name": "Monkey", "description": "The monkey lives in the jungle" } } } 然后我想添加额外的信息在同一个动物,但在另一种语言,使用标签,这样的事情,我想补充每种语言: "ES": { "name": "Mono", "description": "El mono vive en la selva" } 结果应该是这样的: { "_id": ObjectId("55489125dadf65e30969d6d3"), "codAnimal": "100001", "animalData": { "EN": { "name": "Monkey", "description": "The monkey lives in the jungle" […]
您好我正在尝试编写一个Node + Express来提供REST服务。 一切顺利,当应用程序启动。 然而,几个小时后,我得到一个错误:“代码”:“PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR”,“致命”:错误。 似乎有些资源已经不多了。 有人知道如何解决这个问题。 这是代码的主要部分: var mysql = require("mysql"); var _ = require('underscore') var Q = require("q"); function REST_ROUTER(router,connection,md5) { var self = this; self.handleRoutes(router,connection,md5); } var queryWithPromise = function (connection, query) { var deferred = Q.defer(); connection.query(query, function(err, rows, fields) { if (err) { deferred.reject(err); }; if (!rows||(rows.length === 0)) { […]
所以我有一个模型,我试图testing。 它具有自定义终结点以及标准REST终结点。 我build立了一个套件来testing标准操作。 首先,我张贴了,然后我插入(一个没有身份证…基本上是一个职位),然后我得到了。 最后,我删除了我发布时创build的条目,并且在我自己之后进行清理,以便删除我已插入的点。 这工作,这是很好的。 然后,在同一个文件中,我添加了另一个套件,这个套件testing我的自定义端点。 现在我的钩子应该删除插入点失败。 这不好。 我尝试在新的描述语句中包装我的testing删除,但它再次没有工作。 最后,我完全抛弃了这个钩子,只是发了两个.del的电话,但它仍然不起作用。 我在我的智慧结束。 请让我知道,如果你能弄清楚为什么这不起作用,以及如何使其工作。 先谢谢你! 这是我的代码: var request = require('supertest'); var app = require('../server'); var chai = require('chai'); var chance = require('chance').Chance(); var assert= require('assert'); function json(verb, url) { return request(app)[verb](url) .set('Content-Type', 'application/json') .set('Accept', 'application/json') .expect('Content-Type', /json/); } describe('Testing standard REST endpoints-(CREATE, GET,PUT, DELETE)', function() { […]