Tag: express

是明确的身体parsing器asynchronous?

我正在为我的应用程序创buildRESTful API,并且使用Bodyparser来parsing发送到我的API端点的JSON数据。 app.get('/api/endpoint', function(req,res) { console.log(req.body); console.log(req.body.path.split('/')); res.status(200).end(); }); 我以下面的方式configuration了bodyparser, app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); 问题是当我发送这个, var params = { path: '/dir1/dir2/dir3/pptdir' }; 它引发一个错误, TypeError:不能调用未定义的方法'split' 在这个错误之后,console.log语句都可以正常工作并打印下面的输出。 { path: '/dir1/dir2/dir3/pptdir' } [ '', 'dir1', 'dir2', 'dir3', 'pptdir' ]

Expressjs使用对象标题作为dynamicurl

我想弄清楚如何路由我的GET单个对象路由参数的标题,而不是ID。 我知道body-parser允许请求,但不知道如何修改我当前的路由设置,以允许发生这种情况。 我的想法是将所有blogpost_id更改为blogpost_title,但是我遇到了这个错误。 { "message":"Cast to ObjectId failed for value \"Data Cost Upload\" at path \"_id\"", "name":"CastError", "type":"ObjectId", "value":"Data Cost Upload", "path":"_id" } routes.js: //Route for individual blogs router.route('/blog/:blogpost_id') // START GET method blog by ID .get(function(req, res) { Blogpost.findById(req.params.blogpost_id, function(err, blogpost) { if (err) res.send(err); //res.json(blogpost); res.render('pages/blogpost', { blogpost: blogpost }); }); }) // […]

即使服务器返回redirect(3XX),HTTP客户端是否也向服务器发送请求主体?

我目前正在构build一个接收客户端上传(可能是大文件)的node.js express Web服务。 我有一个端点(我们称之为FOO),它为每个请求返回一个redirect,告诉客户端在哪里上传数据(我们称之为URL DEST)。 我担心客户端会将请求正文中的数据发送到FOO,即使FOO保证redirect。 我意识到端点FOO可以忽略请求体中的数据,但是我担心客户端正在上传数据两次。 一次到FOO,一次到DEST。 有谁知道这是否与HTTP客户端的行为一致? 如果是这样,有没有办法阻止HTTP客户端上传两次?

Express + node.js API过滤

我正在开发一个节点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,Passport进行服务器到服务器的身份validation

我有两个服务在不同的子域上运行:1)Node.js,Express,PassportJS,2)基于PHP。 这两个服务都暴露在同一个门户网站中,为了避免要求用户input凭证两次,我们从PHP服务器调用Node.jsloginAPI。 节点返回会话cookie( connect.sid ),我们转发这个客户端的域设置为<<rootdomain>>.com 。 现在,当客户端调用Node.js时,我们可以看到cookie被发送到Node,但仍然无法validation。 我已经validation了以下几点: 从PHP服务器到Node的loginAPI调用返回connect.sid cookie的成功,并将会话条目添加到Redis服务器(我们使用Redis来存储会话) Cookie在浏览器中正确设置 浏览器调用Node.js时connect.sid cookie发送到服务器 如果我们直接从客户端调用loginAPI,一切都按预期工作。 基本上独立的Node应用程序没有任何问题。 我很好奇节点是否使用用户代理,IP或什么来validationconnect.sid cookie? 或者它与Passport / Express会话参数值有关吗? 什么可能是错的? 仅供参考,目前网站没有在SSL上运行。 这是我的会议参数: store = new RedisStore({ port: 6379, host: 'localhost', client : redis }); var sess = { store: store, secret: 'some secret', rolling: true, cookie: { maxAge : 36000000, secure: false }, saveUninitialized: […]

有效的alphabetizes GET响应

我目前正在尝试在Angular中创build一个交互式表,以反映来自SQL数据库的表信息。 我使用的是MSSQL,Express.js和AngularJS。 当我在Node中logging响应时,数据按照所需的顺序。 但是,当我从.success(function(data))logging数据时,字段按字母顺序排列,行按随机顺序排列)。 我发送一个JSON对象(EX行{"b":"blah","a":"aye"} )。 然而,该行在Angular中被接收为{"a":"aye","b":"blah"} 。 期望的影响 – >在客户端视图中使用来自SQL查询的列和行sorting。 删除“魔术”angular正在使用订购信息。

通过多个页面保持socket.io中的variables

我对node.js和socket.io相当陌生,所以其中一些问题可能看起来很愚蠢。 据说,我一直在试图开发一个应用程序,可以在不同的页面之间存储用户名。 例如,我在一个页面上设置了我的用户名。 然后我redirect到另一个页面,但是我的用户名仍然是一个可以在套接字连接中访问的variables。 这是我的基本服务器设置: var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/set', function(req, res){ res.sendfile('set.html'); }); app.get('/get', function(req, res){ res.sendfile('get.html'); }); io.on('connection', function(socket){ }); http.listen(3000, function(){ console.log('listening on *:3000'); }); 我的问题是: 1.)有可能知道该sockets目前在哪个页面上? 如果是这样,怎么样? 2.)如何与io.on(…)中的信息交互? 我曾尝试使用会话中间件socket.io和expression,但我似乎无法得到任何工作。 我很确定使用会话是最好的方法,但我不知道如何实现它们。 任何有关设置可通过不同页面访问的会话的build议也会很好。 谢谢!

Sequelize hasMany / belongsToMany和实例方法

我正在写一个CRUD来pipe理SequelizeJS(版本2.0.0-rc6)和ExpressJS系统中的用户。 一个用户可以在多个用户组中,一组用户可以有多个用户。 问题是,当我尝试添加用户到一组用户时,sequelize正在抛出以下错误: Possibly unhandled TypeError: Cannot call method 'replace' of undefined at Object.module.exports.removeTicks (/home/app/node_modules/sequelize/lib/utils.js:512:14) at Object.module.exports.addTicks (/home/app/node_modules/sequelize/lib/utils.js:508:29) at Object.module.exports.QueryGenerator.quoteIdentifier (/home/app/node_modules/sequelize/lib/dialects/postgres/query-generator.js:881:22) at generateJoinQueries (/home/app/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1100:72) at Object.<anonymous> (/home/app/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1165:29) at Array.forEach (native) at Object.module.exports.QueryGenerator.selectQuery (/home/app/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1164:25) at module.exports.QueryInterface.select (/home/app/node_modules/sequelize/lib/query-interface.js:679:35) at null.<anonymous> (/home/app/node_modules/sequelize/lib/model.js:728:34) 模型/用户group.js module.exports = function(sequelize, DataTypes) { var UserGroup = sequelize.define("UserGroup", { id: { type: DataTypes.INTEGER, autoIncrement: […]

在ExpressJS 4中使用来自不同域的公共目录

我正在为Heroku部署一个简单的Express应用程序。 它基本上是一个投资组合网站,服务于图像响应从客户端JavaScript的Ajax调用。 现在,我的所有图像(以及其他静态css和客户端JS文件)都在公共目录中,这是在通过Express CLI生成器实例化应用程序时创build的。 当我在本地运行它时,一切正常,但我不想直接将图像file upload到Heroku。 在那里运行应用程序似乎是最简单的,这样我就不必自己处理设置服务器了,但是我想为从其他地方付费的图像提供服务。 看起来这将足够简单,可以为我的所有静态文件提供服务,只需更改Express的中间件查找公共目录的位置即可: // Works like this with everything in one place: app.use(express.static(path.join(__dirname, 'public'))); // What I thought I could do to serve from elsewhere: app.use(express.static('www.mydomain.net/path/to/public')); 我已经尝试了一些变化,如包括__dirname(即使我很确定这是错误的),并改变path(包括添加/ www.mydomain.net的前面)。 我也确定其他地方的path在前面不包含“./”,所以他们不应该在自己的目录中查找。 这些工作都没有 – 我已经尝试了所有地方使用工头和npm开始,以及实际上推到我的英雄主。 我看到了HTML的基本框架,但是CSS和JS没有应用,图像也没有出现。 控制台显示404错误的一切。 我已经相当广泛地search了一些关于Express和Heroku的相当多的知识,但仍然无法做到这一点。 那么,有没有一个简单的解决scheme,我忽略了,还是我试图做一些没有意义的事情? 编辑:我无法弄清楚这一点,所以我只是继续前进,并在一台服务器上安装整个应用程序。 工作很好,但我仍然对此感到好奇。

POST net :: ERR_INSUFFICIENT_RESOURCES,同时使用nodeJS上传多个图像

我已经做了一些研究,但主要是我已经结束了查询,以限制上传文件的数量。 我正在开发一个Web应用程序(在nodeJS服务器上运行),它具有上传文件(主要是图像)的function。 现在,我正在使用一个简单的HTML表单,上传内容如下: <input id="myFile" type="file" name="file" multiple="multiple"/> 我们的目标是接受来自用户多达几千个图像的多个file upload。 我使用nodejs模块强大的parsing上传的表单元素和处理多个图像(存储,重命名..等)。 form.on('field', function(field, value) { fields.push([field, value]); }) form.on('file', function(field, file) { files.push(file); }) form.on('end', function() { console.log('done'); }); form.on('progress', function(bytesReceived, bytesExpected) { console.log('Progress so far: '+(100*(bytesReceived/bytesExpected))+"%"); }); form.parse(req, function(err, fields, files) { //my logic to storing and handling the file uploads } 所以现在,我能够一次处理大约8000张图像(256×256尺寸)的上传。 但是,如果用户select超过这个限制,应用程序崩溃redirect到“这个网页不可用”的页面。 […]