skylarkjs定位是前端解决方案,本身并不包括后台实现逻辑,但由于其前端路由本身就是基于express的router的,所以在一些需要使用后台的开发场景中,我们可以很方便的对skylarkjs进行简单的扩展,从而引入后台功能。
skylarkjs的服务启动功能,集成在skylark-slax-nodeserver模块中,我们可以在server.js中对这一模块进行扩展,让skylarkjs支持后台功能。
'use strict';
const SlaxServer = require('skylark-slax-nodeserver'),
path = require('path'),
logger = require('morgan'),
cookieParser = require('cookie-parser'),
bodyParser = require('body-parser'),
session = require('express-session'),
methodOverride = require('method-override'),
chalk = require('chalk'),
// 后台相关路由
routes = require('./backend/routes/routes');
// 添加后台逻辑
SlaxServer.prototype.startBackend = function(callback) {
let app = this._express;
if (app) {
app.use(logger('dev'));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cookieParser());
app.use(methodOverride('X-HTTP-Method-Override'));
app.use(session({ secret: 'supernova', saveUninitialized: true, resave: true }));
// Session-persisted message middleware
app.use(function(req, res, next) {
let err = req.session.error,
msg = req.session.notice,
success = req.session.success;
delete req.session.error;
delete req.session.success;
delete req.session.notice;
if (err) res.locals.error = err;
if (msg) res.locals.notice = msg;
if (success) res.locals.success = success;
next();
});
routes(app);
}
}
// 构建服务
function serve(slaxApp, options) {
options.slax = slaxApp;
const server = new SlaxServer(options);
server.start(function() {
console.log(chalk.blue('*'), 'slax server successfully started.');
console.log(chalk.blue('*'), 'Serving files at:', chalk.cyan('http://localhost:' + options.port));
console.log(chalk.blue('*'), 'Press', chalk.yellow.bold('Ctrl+C'), 'to shutdown.');
return server;
});
// 启动后台相关路由
server.startBackend();
}
// 启动服务
serve("deploy/bedoer.slax", {
port: process.env.PORT || 8087
});
skylarkjs app中默认是通过脚本sjs serve来启动服务,由于我们对启动脚本进行了相关扩展,所以我们需要在package.json中更改启动脚本。
{
"scripts": {
"serve": "node server.js" (原来为"sjs serve ./deploy/demo.slax")
}
}
启动脚本还是原来的:
npm run build; npm run deploy; npm run serve -- --port=8088