在我问起之前我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()是我的信息缓存,如果应用程序找不到请求的页面,它将检查缓存以查看它是否存在.
在NodeJS express模块的文档中,示例代码具有app.use(...).
什么是use功能,它在哪儿定义?
我不明白为什么我们需要body-parser在Express应用程序中,因为我们可以在不使用的情况下获取数据body-parser.它实际上做了什么以及如何做?
我将以下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响应,但其他两种方法从未运行.这是为什么?
如何将我服务器中的文件下载到访问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)
但我无法获取文件名和文件类型(或扩展名).任何人都可以帮助我吗?
所以,我正在用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文件(例如)中调用这些函数?
FBFriendModel.find({
id: 333
}, function (err, docs) {
docs.remove(); //Remove all the documents that match!
});
Run Code Online (Sandbox Code Playgroud)
以上似乎不起作用.记录仍在那里.
有人能解决吗?
假设您有一个简单的代码块,如下所示:
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框架开始.我有一个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)
我在这里错过了什么?
我正在运行带有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) express ×10
node.js ×10
javascript ×4
mongodb ×2
sockets ×2
body-parser ×1
download ×1
file ×1
html ×1
json ×1
middleware ×1
pug ×1
tcp ×1