标签: express

Node.js/Express.js - app.router如何工作?

在我问起之前我app.router想我应该至少解释一下我在使用中间件时的想法.要使用中间件,要使用的功能是app.use().当中间件被执行时,它将通过使用next()或调用下一个中间件来调用,因此不再调用中间件.这意味着我放置中间件调用的顺序很重要,因为某些中间件依赖于其他中间件,而某些中间件甚至可能甚至都没有被调用.

今天我正在处理我的应用程序并让我的服务器在后台运行.我想进行一些更改并刷新页面并立即查看更改.具体来说,我正在改变我的布局.我无法让它工作,所以我搜索了Stack Overflow的答案并找到了这个问题.它说要确保它express.static()在下面require('stylus').但当我查看OP的代码时,我看到他app.router在他的中间件调用结束时接到了他的电话,我试图找出原因.

当我创建我的Express.js应用程序(版本3.0.0rc4)时,我使用了该命令,express app --sessions --css stylus并在我的app.js文件中设置了app.router上面的代码express.static()require('stylus')调用代码.所以看起来,如果它已经设置了那样,那么它应该保持这种方式.

重新安排我的代码后,我可以看到我的Stylus更改,它看起来像这样:

app.configure(function(){
  //app.set() calls
  //app.use() calls
  //...
  app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
  app.use(express.static(__dirname + '/public', {maxAge: 31557600000}));
});

app.get('/', routes.index);

app.get('/test', function(req, res){
  res.send('Test');
});
Run Code Online (Sandbox Code Playgroud)

所以我决定第一步是找出为什么app.router在我的代码中有重要性.所以我评论了它,开始我的应用程序并导航到/.它显示我的索引页面就好了.嗯,也许它有效,因为我从路线文件(routes.index)导出路由.接下来我导航到/test屏幕上显示Test.哈哈,好的,我不知道是什么app.router.无论它是否包含在我的代码中,我的路由都很好.所以我肯定错过了一些东西.

所以这是我的问题:

有人可以解释一下app.router它的重要性,它的重要性,以及我应该把它放在我的中间件调用中的哪个位置?如果我得到一个简短的解释,那也很好express.static().据我所知,express.static()是我的信息缓存,如果应用程序找不到请求的页面,它将检查缓存以查看它是否存在.

middleware node.js express

295
推荐指数
1
解决办法
8万
查看次数

NodeJS/Express:什么是"app.use"?

NodeJS express模块文档中,示例代码具有app.use(...).

什么是use功能,它在哪儿定义?

node.js express

289
推荐指数
9
解决办法
17万
查看次数

身体解析器对表达有什么作用?

我不明白为什么我们需要body-parser在Express应用程序中,因为我们可以在不使用的情况下获取数据body-parser.它实际上做了什么以及如何做?

node.js express body-parser

289
推荐指数
11
解决办法
21万
查看次数

如何在Express应用程序中使用JSON POST数据

我将以下JSON字符串发送到我的服务器.

(
        {
        id = 1;
        name = foo;
    },
        {
        id = 2;
        name = bar;
    }
)
Run Code Online (Sandbox Code Playgroud)

在服务器上我有这个.

app.post('/', function(request, response) {

    console.log("Got response: " + response.statusCode);

    response.on('data', function(chunk) {
        queryResponse+=chunk;
        console.log('data');
    });

    response.on('end', function(){
        console.log('end');
    });
});
Run Code Online (Sandbox Code Playgroud)

当我发送字符串时,它显示我得到了200响应,但其他两种方法从未运行.这是为什么?

json node.js express

287
推荐指数
6
解决办法
39万
查看次数

使用Express从NodeJS Server下载文件

如何将我服务器中的文件下载到访问nodeJS服务器中页面的计算机?

我正在使用ExpressJS而且我一直在尝试这个:

app.get('/download', function(req, res){

  var file = fs.readFileSync(__dirname + '/upload-folder/dramaticpenguin.MOV', 'binary');

  res.setHeader('Content-Length', file.length);
  res.write(file, 'binary');
  res.end();
});
Run Code Online (Sandbox Code Playgroud)

但我无法获取文件名和文件类型(或扩展名).任何人都可以帮助我吗?

javascript file download node.js express

283
推荐指数
6
解决办法
33万
查看次数

节点上的客户端:未捕获的ReferenceError:未定义require

所以,我正在用node/express + jade combo编写一个应用程序.

我有client.js,在客户端加载.在该文件中,我有从其他JavaScript文件调用函数的代码.我的尝试是使用

var m = require('./messages');
Run Code Online (Sandbox Code Playgroud)

为了加载messages.js(就像我在服务器端一样)的内容,然后加载该文件的调用函数.但是,require没有在客户端定义,它会抛出窗体的错误Uncaught ReferenceError: require is not defined.

这些其他JS文件也在客户端的运行时加载,因为我将链接放在网页的标题上.因此,客户端知道从这些其他文件导出的所有函数.

如何从打开服务器套接字messages.js的主client.js文件中的其他JS文件(例如)中调用这些函数?

javascript sockets node.js express pug

277
推荐指数
5
解决办法
55万
查看次数

如何使用Node.js Mongoose删除文档?

FBFriendModel.find({
    id: 333
}, function (err, docs) {
    docs.remove(); //Remove all the documents that match!
});
Run Code Online (Sandbox Code Playgroud)

以上似乎不起作用.记录仍在那里.

有人能解决吗?

javascript authentication mongodb node.js express

276
推荐指数
17
解决办法
36万
查看次数

Express中使用的参数"next"是什么?

假设您有一个简单的代码块,如下所示:

app.get('/', function(req, res){
    res.send('Hello World');
});
Run Code Online (Sandbox Code Playgroud)

这个函数有两个参数,req并且res,它们分别代表所述请求和响应对象.

另一方面,还有其他函数,第三个参数被调用next.例如,让我们看看以下代码:

app.get('/users/:id?', function(req, res, next){ // Why do we need next?
    var id = req.params.id;
    if (id) {
        // do something
    } else {
        next(); // What is this doing?
    }
});
Run Code Online (Sandbox Code Playgroud)

我无法理解next()它的用途是什么或为什么被使用.在那个例子中,如果id不存在,那next实际上在做什么?

node.js express

273
推荐指数
4
解决办法
12万
查看次数

渲染基本的HTML视图?

我有一个基本的node.js应用程序,我试图使用Express框架开始.我有一个views文件夹,我有一个index.html文件.但是在加载Web浏览器时收到以下错误.

错误:找不到模块'html'

以下是我的代码.

var express = require('express');
var app = express.createServer();

app.use(express.staticProvider(__dirname + '/public'));

app.get('/', function(req, res) {
    res.render('index.html');
});

app.listen(8080, '127.0.0.1')
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

html javascript mongodb node.js express

272
推荐指数
13
解决办法
39万
查看次数

节点js ECONNRESET

我正在运行带有socket.io的Express js应用程序用于聊天webapp,并且我在24小时内随机获得以下错误5次左右.节点进程永远包装,并立即重新启动.

问题是重新启动快速将我的用户踢出他们的房间而没人想要.

Web服务器由HAProxy代理.没有套接字稳定性问题,只使用websockets和flashsockets传输.我无法故意重现这一点.

这是节点v0.10.11的错误:

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: read ECONNRESET     //alternatively it s a 'write'
    at errnoException (net.js:900:11)
    at TCP.onread (net.js:555:19)
error: Forever detected script exited with code: 8
error: Forever restarting script for 2 time
Run Code Online (Sandbox Code Playgroud)

编辑(2013-07-22)

添加了socket.io客户端错误处理程序和未捕获的异常处理程序.似乎这个捕获了错误:

process.on('uncaughtException', function (err) {
  console.error(err.stack);
  console.log("Node NOT Exiting...");
});
Run Code Online (Sandbox Code Playgroud)

所以我怀疑它不是socket.io问题,而是对我做的另一个服务器的http请求或mysql/redis连接.问题是错误堆栈无法帮助我识别代码问题.这是日志输出:

Error: read ECONNRESET
    at errnoException (net.js:900:11)
    at TCP.onread (net.js:555:19)
Run Code Online (Sandbox Code Playgroud)

我怎么知道是什么原因造成的?如何从错误中获得更多信息?

好吧,不是很冗长,但这里是带有"longjohn"的堆栈跟踪:

Exception caught: Error ECONNRESET
{ [Error: read ECONNRESET]
  code: 'ECONNRESET',
  errno: 'ECONNRESET',
  syscall: 'read',
  __cached_trace__: …
Run Code Online (Sandbox Code Playgroud)

sockets tcp node.js express

266
推荐指数
13
解决办法
46万
查看次数