资讯专栏INFORMATION COLUMN

nodejs-local-api

Karrdy / 1354人阅读

摘要:一简述近期,在学习期间,由于需要造数据,想到弄数据库麻烦,就直接用文件代替了,想到不错,主要还是,所以就试着写了写,嘿嘿,能用。

一、简述

近期,在学习vue期间,由于需要造数据,想到弄数据库麻烦,就直接用json文件代替了,想到nodejs不错,主要还是js,所以就试着写了写,嘿嘿,能用。

二、实现

实现使用的技术:Nodejs + Express 4.x + ejs + bootstrap.

初始js配置及所需控件:

var path = require("path");
var express = require("express");
var session = require("express-session");
var flash = require("connect-flash");
var config = require("config-lite");
var routes = require("./routes");
var pkg = require("./package");
var winston = require("winston");
var expressWinston = require("express-winston");
var app = express();

// 设置模版目录
app.set("views", path.join(__dirname, "views"));
// 设置模版引擎为ejs
app.set("view engine", "ejs");

// 设置静态文件目录
app.use(express.static(path.join(__dirname, "public")));
// session 中间件
app.use(session({
    name: config.session.key,   // 设置 cookie 中保存 session id 的字段名称
    secret: config.session.secret, // 过设置 secret 来计算 hash 值并放在 cookie 中,使产生的 signedCookie 防篡改
    resave: true,    // 强制更新 session
    saveUninitialized: false,    // 设置为 false,强制创建一个 session,即使用户未登录
    cookie: {
        maxAge: config.session.maxAge   // 过期时间,过期后 cookie 中的 session id 自动删除
    }
}));
// flash 中间件,用来显示通知
app.use(flash());
// 处理表单及文件上传的中间件
app.use(require("express-formidable")({
    uploadDir: path.join(__dirname, "public/jsonFile"),// 上传文件目录
    keepExtensions: true,// 保留后缀
    encoding: "utf-8"
}));
//设置模版全局常量
app.locals.global = {
    title: pkg.name,
    description: pkg.description
};

// 添加模版必需的三个变量
app.use(function (req, res, next) {
    res.locals.user = req.session.user;
    res.locals.success = req.flash("success").toString();
    res.locals.error = req.flash("error").toString();
    next();
})
// error page
app.use(function (err, req, res, next) {
    res.render("error", {
        error: err
    });
});

// 正常请求的日志
app.use(expressWinston.logger({
    transports: [
        new (winston.transports.Console)({
            json: true,
            colorize: true
        }),
        new winston.transports.File({
            filename: "logs/success.log"
        })
    ]
}));
// 路由
routes(app);
// 错误请求的日志
app.use(expressWinston.errorLogger({
    transports: [
        new winston.transports.Console({
            json: true,
            colorize: true
        }),
        new winston.transports.File({
            filename: "logs/error.log"
        })
    ]
}));

app.listen(config.port, function () {
    console.log(`${pkg.name} listening on port ${config.port}`);
});

在操作json文件过程中,找到了一个蛮实用的第三方插件lowdb。
让我们来看看lowdb如果操作json文件数据的:

var low = require("lowdb");
   ...
var db = low(path.join(__dirname, "../data/apilists.json"));
var data = db.get("dataList")
            .find({ key: id })
            .value();

看上去还是比较简单的...

三、效果展示

代码可以看我的github分享:https://github.com/zhoou/node...,欢迎指正!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82128.html

相关文章

发表评论

0条评论

Karrdy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<