尽管我非常了解JavaScript,但我很困惑Node.js生态系统中这三个项目究竟是做什么的.它是否像Rails的机架?有人可以解释一下吗?
我正在使用快递4.0,我知道身体解析器已被取出快递核心,我使用推荐的替代品,但我得到了
body-parser deprecated bodyParser: use individual json/urlencoded middlewares server.js:15:12
body-parser deprecated urlencoded: explicitly specify "extended: true" for extended parsing node_modules/body-parser/index.js:74:29
我在哪里可以找到这个假设的中间件?或者我不应该收到此错误?
var express = require('express');
var server = express();
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var passport = require('./config/passport');
var routes = require('./routes');
mongoose.connect('mongodb://localhost/myapp', function(err) {
if(err) throw err;
});
server.set('view engine', 'jade');
server.set('views', __dirname + '/views');
server.use(bodyParser());
server.use(passport.initialize());
// Application Level Routes
routes(server, passport);
server.use(express.static(__dirname + '/public'));
server.listen(3000);
Run Code Online (Sandbox Code Playgroud) 在我问起之前我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()
是我的信息缓存,如果应用程序找不到请求的页面,它将检查缓存以查看它是否存在.
我听过很多人最近谈到中间件,但中间件的确切定义是什么?当我查看中间件时,我发现了很多信息和一些定义,但在阅读这些信息和定义时,似乎大多数所有"商品"都处于中间状态.那么,所有东西都是中间件吗?
或者你有一个不是中间件的软件的例子?
好吧,我的问题是我想将一些变量从第一个中间件传递到另一个中间件,我尝试这样做,但是" req.somevariable
有一个给定为'undefined'".
//app.js
..
app.get('/someurl/', middleware1, middleware2)
...
Run Code Online (Sandbox Code Playgroud)
////middleware1
...
some conditions
...
res.somevariable = variable1;
next();
...
Run Code Online (Sandbox Code Playgroud)
////middleware2
...
some conditions
...
variable = req.somevariable;
...
Run Code Online (Sandbox Code Playgroud) 如何在我的Django REST框架上启用CORS?该参考文献没有多大帮助,它说我可以用中间件做,但我怎么能这样做?
我在node.js中使用Express框架和一些中间件函数:
var app = express.createServer(options);
app.use(User.checkUser);
Run Code Online (Sandbox Code Playgroud)
我可以使用.use
带有附加参数的函数仅在特定路径上使用此中间件:
app.use('/userdata', User.checkUser);
Run Code Online (Sandbox Code Playgroud)
是否可以使用路径变量,以便中间件用于除特定路径之外的所有路径,即根路径?
我在考虑这样的事情:
app.use('!/', User.checkUser);
Run Code Online (Sandbox Code Playgroud)
所以User.checkUser
总是被调用除了根路径.
我有兴趣为iPhone和Android平台编写应用程序.我希望找到一个中间件/框架,它抽象出API中的一些差异,并允许我在构建时指定目标平台.是否存在或计划了这样的框架?
我已经插入了一个中间件,redux-thunk,我想添加另一个,redux-logger.
如何配置它以便我的应用程序使用两个中间件?我试过传递一组[ReduxThunk, logger]
但是没有用.
码:
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import ReduxThunk from 'redux-thunk';
import logger from 'redux-logger';
import App from './components/app';
import reducers from './reducers';
require('./style.scss');
const createStoreWithMiddleware = applyMiddleware(ReduxThunk)(createStore);
ReactDOM.render(
<Provider store={createStoreWithMiddleware(reducers)}>
<App />
</Provider>,
document.querySelector('#app')
);
Run Code Online (Sandbox Code Playgroud) 有一些类似的问题,但我的问题是,如果我想传播我得到的不同路由中间件的中间结果,那么最好的方法是什么?
app.use(f1); app.use(f2); app.use(f3);
function f1(req,res,next) {
//some database queries are executed and I get results, say x1
res.locals.dbResults = {...};
next();
}
function f2(req,res,next) {
// more processing based upon req.locals.dbResults
res.locals.moreResults = {....};
next();
}
// ...
Run Code Online (Sandbox Code Playgroud)
我认为通过使用req .locals ,我可以通过不同的中间件获得相同的数据传播.此外,似乎请求和响应对象都在请求开始时将locals属性初始化为空对象.
另外,还可以设置res.mydata或req.mydata属性吗?
从理论上讲,app.locals也可用于通过不同的中间件传递这些数据,因为它将持续穿过中间件,但这与app.locals的传统使用相反.它更多地用于特定于应用程序的数据.还需要在请求 - 响应周期结束时清除该数据,以便相同的变量可用于下一个请求.
通过中间件传播中间结果的最佳和标准方法是什么?
middleware ×10
node.js ×6
express ×5
frameworks ×2
android ×1
cors ×1
django ×1
iphone ×1
javascript ×1
next ×1
python ×1
react-redux ×1
reactjs ×1
redux ×1
redux-thunk ×1
routes ×1