Tag: 表示

为什么我的Express.js后端的CORS设置不起作用?

我正在为我的Express.js后端设置CORS。 由于我有一个本地和远程版本的前端我想允许一些URLS访问到后端。 我曾尝试使用“*”和var cors = require('cors') app.use(cors())但我得到 当凭证标志为真时,不能在Access-Control-Allow-Origin中使用通配符。 我曾尝试使用cors()的dynamic设置,但没有示例如何使用Express的路线。 我现在试图创build我自己的白名单检查下面的代码,但现在我越来越 请求的资源上没有“Access-Control-Allow-Origin”标题。 原因' http:// localhost:5000 '因此不被允许访问。 该响应具有HTTP状态码500。 我究竟做错了什么? 更新:它看起来像if语句阻止添加标题,所以我试图删除它,看看res.header('Access-Control-Allow-Origin', req.get("origin")); 现在正在给我 凭证标志是'true',但是'Access-Control-Allow-Credentials'标头是''。 允许凭证必须是“真实的”。 var whiteList = { "http://localhost:5000": true, "https://example-url.herokuapp.com": true }; var allowCrossDomain = function(req, res, next) { if(whiteList[req.get('Origin')]){ res.header('Access-Control-Allow-Credentials', true); res.header('Access-Control-Allow-Origin', req.get('Origin')); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, Origin, Accept'); next(); } }; […]

使用范围保护API(oauth2orize,passport,express,Nodejs)

我正在尝试使用node / express创build一个API,并使用Passport和oauth2orize来保护它。 我有API的工作,我有oauth2的东西工作,但我似乎无法弄清楚如何实现与范围保护API方法。 oauth2orize标记hander-outer: server.exchange(oauth2orize.exchange.password(function (client, username, password, scope, done) { scope = scope || ['unauthorized']; db.collection('oauth_users').findOne({username: username}, function (err, user) { if (err) return done(err); if (!user) return done(null, false); for (i in scope) if(user.scope.indexOf(scope[i]) < 0) return done(null, false); bcrypt.compare(password, user.password, function (err, res) { if (!res) return done(null, false); var token […]

404简单的Express路由错误

我正在尝试使用Express.js和Mongoose.js在我的Node.js应用程序中使用本教程设置路由 – https://thinkster.io/mean-stack-tutorial/当我用cURLtesting时,它给了我这个消息: (curl脚本是: curl –data 'title=test&link=http://test.com' http://localhost:3000/#/posts ) Error: Not Found at /Users/adamz/flapper-news3/app.js:30:13 at Layer.handle [as handle_request] (/Users/adamz/flapper-news3/node_modules/express/lib/router/layer.js:82:5) at trim_prefix (/Users/adamz/flapper-news3/node_modules/express/lib/router/index.js:302:13) at /Users/adamz/flapper-news3/node_modules/express/lib/router/index.js:270:7 at Function.proto.process_params (/Users/adamz/flapper-news3/node_modules/express/lib/router/index.js:321:12) at next (/Users/adamz/flapper-news3/node_modules/express/lib/router/index.js:261:10) at /Users/adamz/flapper-news3/node_modules/express/lib/router/index.js:603:15 at next (/Users/adamz/flapper-news3/node_modules/express/lib/router/index.js:246:14) at Function.proto.handle (/Users/adamz/flapper-news3/node_modules/express/lib/router/index.js:166:3) at router (/Users/adamz/flapper-news3/node_modules/express/lib/router/index. 为了参考我的app.js文件如下: var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var […]

在我的应用程序启动时创build所有路线是不是一个好主意?

我在我的新Web应用程序中使用Node.js,并在应用程序启动时创build所有路由。 它会以正面还是负面的方式影响我的应用程序? 例如,我有几条路线: app.get('admin/1', controller.1); app.get('admin/2', controller.2); app.get('admin/3', controller.3); app.get('admin/4', controller.4); app.get('admin/5', controller.5); 当用户请求路由时,控制器将被加载,对吧? 所以我做了这个小函数,它将在应用程序启动时创build所有的路线。 上面的代码将如下所示: registerRoute(app, [ ['GET', '/admin/1', controller.1], ['GET', '/admin/2', controller.2], ['GET', '/admin/3', controller.3], ['GET', '/admin/4', controller.4], ['GET', '/admin/5', controller.5], ] ); 我认为这是更有组织,但我想这将如何影响我的应用程序。 谢谢! 更新: 例: registerRoute(app, [ ['GET', '/admin', mainController.index], ['GET', '/admin/events', eventController.index], ] ); 和registerRoute代码: var registerRoute = function (app, […]

Express路由器参数validation

快速的4x API文件声称,您可以传递正则expression式作为第二个参数router.param为了validationrouter.param 。 现在可以使用该方法来有效地validation参数(并且可以parsing它们以提供捕获组) 然后提供以下示例。 // validation rule for id: should be one or more digits router.param('id', /^\d+$/); router.get('/user/:id', function(req, res) { res.send('user ' + req.params.id); }); // validation rule for range: should start with one more alphanumeric characters, followed by two dots, and end with one more alphanumeric characters router.param('range', /^(\w+)\.\.(\w+)?$/); router.get('/range/:range', function(req, res) […]

服务器端反应路由器不会呈现我的路线

我与版本1.0.0-rc1和我的匹配函数将不会正确呈现我的路线。 这是我的服务器 import express from 'express'; import React from 'react'; import createLocation from 'history/lib/createLocation' import Router, { match, RoutingContext } from 'react-router'; import createRoutes from './create-routes'; const app = express(); const routes = createRoutes(); app.use((req, res) => { let location = createLocation(req.url); match({ routes, location }, (error, redirectLocation, renderProps) => { if (redirectLocation) res.status(301).redirect(redirectLocation.pathname + […]

在Express.js中,如何设置通配符路由与资产文件不匹配?

我正在构build我的第一个真正的Express.js应用程序,并坚持路由。 我启用静态托pipe: app.use("/", express.static("public")); 然后我有一个通配符路线: router.get("/:page", function(req, res) { // do stuff }); 这条路线是匹配像“ /about ”和“ /contact ”的url – 我想要的。 但它似乎也试图匹配“ /style.css ”和其他静态资产文件 – 这是不必要的。 如何使这个通配符与资产文件不匹配?

这是可能的使用bookshelf.js迁移?

我正在尝试使用knex和bookshelf进行迁移,到目前为止,这是我的代码,它是书架文档中的一个示例: exports.up = function(knex, Promise) { return knex.schema.createTable('books', function(table) { table.increments('id').primary(); table.string('name'); }).createTable('summaries', function(table) { table.increments('id').primary(); table.string('details'); table.integer('book_id').unique().references('books.id'); }); }; 我试了跑: knex migrate:make my_migration_name knex migrate:latest knex migrate:rollback 但是在我的数据库中没有一个变化。 任何想法如何能得到它的工作?

Node Express无法设置发布请求的会话

我使用node express 4.0来实现一个消息代码validationfunction。 我使用会话来存储我发送的味精代码。 我设置会话中间件作为dos说: app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(session({secret:'ssssss'})); app.use(express.static(path.join(__dirname, 'public'))); app.use('/uploads', express.static(path.join(__dirname, 'uploads/temp'))); 但是当我使用post方法获取msg代码时,发现会话没有成功设置。 像下面的代码一样: router.post('/msgCode', function(req, res) { req.session.test = 'test'; // request send msg code api then response } 当我重新发布这个路由器时,我发现req.session.test是未定义的。 那么我在另一个路由器上试试这个: router.get('/sendMsgTest', function(req, res) { req.session.test = 'test'; res.json({ status:0 }) } 每次我请求sendMsgTest ,我都可以得到req.session.test 。 当我请求另一个get方法时,我可以成功获得req.session.test值。 那为什么我的post方法不起作用?

通配符或正则expression式节点在中间件上表示装载path

我想定义不同的中间件,具体取决于path的外观。 事情是,path可能会警惕; 我想例如支持以下path: /chat/auth/test /chat/auth/add /chrome/auth/test /chrome/add 每次auth在path中,我都希望auth中间件被调用, 聊天和chrome我希望他们各自的中间件被调用。 app.js: // Middleware authentication var chatAuthenticate = require('./server/middleware/chat-authenticate'); app.use('/chat', chatAuthenticate(addon)); var authAuthentication = require('./server/middleware/auth-authenticate'); app.use('/auth', authAuthentication()); 我明白,我可以添加多个条目到app.js的每个可能的组合,如/ chat / auth和/ chrome / auth,它不会增加复杂性,但我只是好奇,如果有可能解决这与通配符或正则expression式:)