Articles of 表示

新手问题部分

我有一个简单的页面,头,菜单,内容和页脚。 我需要将它们分成不同的文件。 通过快速文档阅读后(我创build了4个模板)写下这样的东西: app.get('/', function(req, res) { var response = [null, null, null, null] , everyNotNull = function(elem) { return (elem !== null); }, sendResponse = function(type, str) { switch (type) { case 'head' : response[0] = str; break; case 'menu' : response[1] = str; break; case 'content' : response[2] = str; break; case 'footer' […]

Expressjs bodyParser和连接forms

我用连接forms上传图像。 但是,如果我使用bodyParser()它是行不通的。 而相反,如果我不使用bodyParser,我不能上传文件? 我如何让他们一起玩? 这是我的configuration: app.configure(function() { app.register('.html', require('ejs')); app.set('views', __dirname + '/../views'); app.set('view engine', 'html'); app.use(gzippo.staticGzip(__dirname + '/../public'),{ maxAge: 86400000 }); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(form({ keepExtensions: true, uploadDir: __dirname + '/../tmp' })); app.use(express.cookieParser()); app.use(express.session({ secret: 'test', cookie: { secure: true }, store: new MySQLSessionStore(client.database, client.user, client.password) })); app.use(expressValidator); app.use(app.router); app.use(express.csrf()); });

使用ExpressJS服务非标准的HTTP方法

我想写一个HTTP服务器,回答请求使用非标准的HTTP方法(动词)。 例如,客户端会提出一个像FOO / HTTP/.1.1这样的请求。 而在服务器端,这个请求将被处理,如: var express = require('express'); var app = express.createServer(); app.configure(function(){ app.use(express.logger({ format: ':method :url' })); app.use(express.methodOverride()); }); app.foo('/', function(req, res){ res.send('Hello World'); }); app.listen(3000); 我将我的非标准方法追加到在ExpressJS的lib/router/methods.js导出的数组中。 这使我能够按预期编写我的服务器代码。 当使用express.methodOverride()和_method=foo的POST请求时,它可以工作。 但是实际的FOO请求不起作用。 一旦客户端发送请求的第一行,连接就被服务器closures: $telnet localhost 3000 Trying 127.0.0.1… Connected to localhost. Escape character is '^]'. FOO / HTTP/1.1 Connection closed by foreign host. 我希望能够使用ExpressJS来实现这一点,而不必避免侵入其核心文件。 任何想法,如果这是可能的和如何?

对于释放的对象不正确的校验和

将数据发布到我的expressjs应用程序,这是我得到的: node(58287,0x7fff771ad960) malloc: *** error for object 0x7ff8a8600c58: incorrect checksum for freed object – object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug Abort trap: 6 任何想法为什么? 更新: 这里是一些代码: 客户端: $.ajax({ url: 'user/' + id, type: 'POST', dataType:'JSON', data: JSON.stringify(data), success: function(response){ console.log(response); } }); 服务器端: app.post('/user/:id', function(req,res){ var […]

Node.js中间件组织和参数validation

我正在构build一个快速的应用程序,我想知道我可以用中间件获得多大的function。 粗略地说,我想用中间件来完成以下任务。 完成: 将requestId添加到所有路由 validation请求 检查用户是否有权访问给定的资源(除了身份validation) 尚未完成: A)validation给定路线的参数 B)如果中间件与路由不同,则以合理的方式组织中间件,每个路由按惯例调用3个中间件 我已经在一个单独的文件中定义了我的中间件,并将其导入到app.js中,如下所示: var middleware = require('./middleware'); var requestId = middleware.requestId; var authenticate = middleware.authenticate; 要将其应用到所有路线,我将其添加到表示config: var app = express.createServer(); app.configure(function () { app.use(express.logger()); app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(requestId); // add requestId to all incoming requests }); 而对于具体的路由,我把它作为一个app.get参数来添加: var routes = require('./v1/routes'); app.get("/v1/foo", routes.foo); app.get("/v1/bar", authenticate, routes.bar); 问题A 我很想有可以用来检查参数的中间件 validate('x','y','z') […]

快速会话不会持续

我正在尝试在节点中build立一个基本的会话系统。 这是迄今为止我所得到的: app.js: app.use(express.cookieParser('stackoverflow')); app.use(express.session()); 我在ajax.js中设置会话数据: addClassToCart: function(req, res) { req.session.cart = req.body.classId; console.log(req.session.cart); } 这logging了正确的信息。 但是,当我尝试在其他地方(相同的文件,不同的function)检索该信息时: console.log(req.session.cart); 我弄undefined明白 我觉得我失去了一些非常基本的东西。 各种各样的教程是可怕的或要求我添加更多的包(我试图避免的东西)。 从我的debugging更多的数据: 这适用于非AJAX请求 会话在logging之前设置。

如何链接到node_modules中的JavaScript文件?

我想链接到/node_modules/jade/runtime.min.js客户端 – 我如何使它公开可访问? 我以某种方式创build一个app.get吗? app.get('/js/jade-runtime.js',<what goes here?>) 或者我可以修改静态的东西,让它被送达? app.use(express.static(path.join(__dirname, 'public'))); // modify this to add more paths somehow 完整的解决scheme(感谢Brad ): app.get('/js/jade-runtime.js',function(req,res) { res.sendfile(path.join(__dirname,'node_modules','jade','runtime.min.js')); });

会话未定义 – 使用Connect-Redis / ExpressJS / Node

今天早上,我醒来发现Nodejitsu旋转出现以下错误: Warning: connection.session() MemoryStore is not designed for a production environment, as it will leak memory, and will not scale past a single process. '好吧!' 我想到了自己 – 然后我去find更合适的东西。 我决定使用Redis,并立即开始在我的应用程序中实现connect-redis和node-redis 。 但是,在重复尝试修复之后,以下错误仍然存​​在。 错误如下: TypeError: Cannot set property 'loggedIn' of undefined at /Users/Ryan/Aggregus/server.js:300:25 at Promise.<anonymous> (/Users/Ryan/Aggregus/object_models/user.js:60:5) at Promise.<anonymous> (/Users/Ryan/Aggregus/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8) at Promise.EventEmitter.emit (events.js:95:17) at Promise.emit (/Users/Ryan/Aggregus/node_modules/mongoose/node_modules/mpromise/lib/promise.js:79:38) at Promise.fulfill […]

node.js + socket.io + redis体系结构 – 水平serverscaling套接字连接?

我第一次使用node.js并希望得到一个build议: 我在我的服务器上安装了以下程序: node.js v0.11.3-pre expressionv3.3.4 socket.io v0.9.14 connect-redis v1.4.5 Redis服务器v = 2.6.14 redis-cli 2.6.14 首先,我创build了一个快速应用程序: express testApplication 在创build的“package.json”中,我定义了所有必要的依赖关系。 从一开始,我就在一个名为“cluster.js”的文件中定义了一个用于垂直缩放(多进程)的集群: var cluster = require('cluster'); if( cluster.isMaster ) { var noOfWorkers = process.env.NODE_WORKERS || require('os').cpus().length; console.log("Workers found: " + noOfWorkers); for (var i = 0; i < noOfWorkers; i += 1) { cluster.fork(); } } else { […]

Express.js – 在同一页面上发送警报作为响应

我有3种forms的视图,当提交时,在mysql数据库中添加新的条目。 我想在每次添加条目时都发送一条提示“您已经成功添加了X”,而无需从页面导航。 // Form to be Submitted <form method="post" action="route/action/"> <input type="text" name="name"> </form> // Route exports.action = function (req, res) { client.query(); // What kind of response to send? } 我怎样才能发送警报? 我应该发什么样的回应? 谢谢!