Articles of 表示

如何快递路线类似的url链接?

使用node.js开发web应用程序并进行expression。 我有以下两个url来区分: / API / V1 /源?ID = 122323 / API / V1 /源?时间戳= 1555050505&计数= 10 我想出了一个天真的解决scheme。 我离开这样的类似的URL到一个路线方法,并使用if eles指定的解决scheme,即: if(id){ //solution with id } if(timestamp&&count){ //solution with timestamp and count but without id } 显然,这是不干净的。 因为将来我可能要增加新的领域,这将使这个路由器巨大和丑陋。 那么我该如何克服这个问题呢? 或者更改url结构。我想要构build一个Restful api。

Express.js每个请求外部路由的唯一variables

在我的快速应用程序中,我有一个叫helpers的模块,几乎所有的路由和模块都需要这个模块。 这个模块有一个logging器方法,logging到fluentd(但这不重要)。 在构build要logging的数据时,我想添加请求的唯一标识符,以便为同一个请求写入的所有日志具有相同的唯一ID。 在应用程序入口点app.use中使用全局variables不起作用,因为每次新请求命中时都会覆盖该variables,所以全局uuid将会在高负载或长时间运行的任务中发生明显变化。 res.locals在路由之外是不可用的,所以我不能在这个问题上使用它。 有没有办法创build一个var,每个请求都是唯一的,每个模块都可以使用,或者可以通过一种方式访问​​路由之外的res.locals数据? 谢谢 编辑 也许一个例子将有助于更好地理解这个问题。 假设我有一个叫做helpers.js的模块,像这样: let helpers = {}; helpers.log = (logData, logName) => { fluentLogger.emit('', { name: logName, //uuid: the needed uuid, message: logData }); } module.exports = helpers; 现在显然我可以在我的app.js入口点做到这一点: app.use(function (req, res, next) { res.locals.uuid = uuid.v4(); next(); }); 然后在每个需要帮助器的加载中间件模块中(向helpers.log方法中添加一个新的参数): const helpers = require('helpers'); router.post('/', (req, res, next) […]

使用帕格与NodeJS和Webpack

我正在尝试使用Webpack与Pugbuild立一个基本的Express应用程序。 这是我的文件树: build |-views |-index.pug |-app.js |-app.js.map server |-app.js package.json webpack.config.js app.js: const express = require('express'); const app = express(); const path = require('path'); app.set('port', process.env.PORT || 3000); app.set('view engine','pug'); app.set('views', path.join(__dirname + 'views')); app.get('/',(req,res) => { res.render('index'); }); var server = app.listen(app.get('port'), () => { console.log('Express server is listening on port ' + server.address().port); […]

加法运算不正确ExpressJs,哪里减法运作正常

我正在做一个NodeJs项目。 我正面临这个问题。减法正常工作但除此之外是造成问题…………….. var previous_stock=results[0]['remain_stock']; //suppose value is 123 var products_qty=request.body.products_qty; //suppose valut is 7 var update_data={ remain_stock:previous_stock-products_qty, //output is 116 } var update_data2={ remain_stock:previous_stock+products_qty, //output is 1237 } 如何解决这个问题?

当我添加一个新的中间件来处理express.js中的path时,404没有find

我想做用户身份validation,并在用户点击loginbutton后返回一个页面,我使用express-generator启动项目,并在index.js和login.js中写入以下代码: index.js: var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index'); }); module.exports = router; login.js: var express = require('express'); var router = express.Router(); /* GET main page after user have logged in. */ router.get("/login",function(req, res, next) { res.render('home'); }); module.exports = router; ps索引和home是视图文件夹中的帕格文件 这是我的app.js […]

为各种用户重复执行服务器function

我有一个node.js应用程序,我正在实现一个自定义的SSOlogin系统。 它是如何工作的,它需要用户的GET参数(用户名,真实姓名和电子邮件)以及由我的另一台服务器上的API生成的签名。 我的代码应该做的是采取用户的url GET参数,连接它们,然后用私钥encryption它们。 然后,它将encryption结果与签名进行比较。 如果相等,则返回true,用户login。我的代码如下所示。 app.get('/', function(req, res) { if(!signedIn){ try{ var user = req.query.username; var name = req.query.realName; var email = req.query.email; var signature = req.query.signature; var encrypted = crypto.createHmac('sha256', config.privateKey).update(user + name + email).digest('hex'); if(encrypted == signature){ username = user; signedIn = true; res.sendFile(__dirname + '/view/index.html'); }else{ res.redirect("https://infinia.press/sso/login") } }catch(error){ res.redirect("https://infinia.press/sso/login") } […]

asynchronous问题,同时上传多个文件

嗨,我想上传多个文件,文件写入是适当的。 但我想将文件移动到mongo网格fs中,第一个文件只是正确移动文件的其余部分不会移动到网格fs中,也不会解除链接。 这是我的代码: for (var i = 0; i < files.length; i++) { (function(i) { var singleFile = files[i]; var fileData = JSON.parse(files[i].name); var fileName = fileData.fileName; var fileType = files[i].type; var uniqId = fileData.attachmentId; var targetPath = "./attachments/" + uniqId; var tmp_path = files[i].path; console.log("uniqId : " + uniqId); //uploadFile(tmp_path,targetPath,fileName,uniqId,fileType); fs.readFile(tmp_path, function(err, data) { […]

请求开发模式localhost中的Next.js应用程序在不同端口上运行的Graphql API

我目前切换现有的应用程序从创build反应应用程序到next.js,似乎一切正常工作,除了我的API端口运行在另一个节点应用程序在端口4000,我无法从我的next.js应用程序。 我跟着回购的例子,但我不能使它的工作,在生产中我使用nginx作为反向代理没有问题,但我在开发模式。 为了设置与Redux的阿波罗我跟着这个例子: with-apollo-and-redux和代理我用这个例子与自定义反向代理 我知道,我做错了,我现在还搞不清楚 在initApollo.js中 … function create() { return new ApolloClient({ ssrMode: !process.browser, networkInterface: createNetworkInterface({ uri: "/api" }) }); } … 在server.js中 … const devProxy = { "/api/": { target: "http://localhost:4000/api/", changeOrigin: true } }; app .prepare() .then(() => { const server = express(); if (dev && devProxy) { const proxyMiddleware = require('http-proxy-middleware') […]

使用Express JS检查API请求授权的更好方法

我有一个超级冗余的server.js文件,因为几乎所有属于REST API的方法都是这样开始的,因为我必须在API请求中检查客户端是否有权要求特定的事情。 var jwt = require('jsonwebtoken'); // … app.get('/getsomething', function(req, res) { "use strict"; var token = req.headers[tokenName]; if (token) { jwt.verify(token, app.get('some_secret'), { ignoreExpiration: false }, function(err, decoded) { if (err || typeof decoded === "undefined") { res.json({ status: 401, message: "unauthorized" }); } else { // actual code starts here… 什么是更好的方法?

expression不同的到期

我有以下代码在Express中创build会话。 app.use(session({ secret: 'randomstring', saveUninitialized: false, resave: false, cookie: { secure: true, maxAge: 60000 * 60 /* 1 hour */ } })); 我主要使用这个将会话数据存储在Passport.js中。 目前1小时后,用户会自动注销。 或者会话结束,用户注销。 有没有简单的方法在会话中存储更多的数据,并有不同的信息到期date? 所以说我想Passport.js( req.session.passport.user )会话数据有一个1小时到期。 我想要另一个数据片段(例如req.session.myDataA )的有效期为30天。 而我希望另一块数据( req.session.myDataB )没有到期并永远保持活动状态。 在Express Sessions中是否有一种简单的方法来实现这种行为?